Cómo usar Xpath uso (php) actualizar archivo?
XPath es un lenguaje de consulta para documentos XML. Como tal, solo una expresión XPath no puede modificar un documento XML, solo puede seleccionar nodos u otros datos del mismo.
Un documento XML modificado puede ser producido con la ayuda del lenguaje de programación que aloja el motor de XPath - esto puede ser XSLT, C#, Java, PHP, ...
y necesito cambie los valores Age y Género donde el nombre es "Jasmin".
Aquí es una simple transformación XSLT que produce un nuevo documento XML de acuerdo con estos requisitos:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:params>
<name>Jasmin</name>
<age>31</age>
<gender>X</gender>
</my:params>
<xsl:variable name="vParams" select=
"document('')/*/my:params"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"Person[Name=document('')/*/my:params/name]/Age">
<Age><xsl:value-of select="$vParams/age"/></Age>
</xsl:template>
<xsl:template match=
"Person[Name=document('')/*/my:params/name]/Gender">
<Gender><xsl:value-of select="$vParams/gender"/></Gender>
</xsl:template>
</xsl:stylesheet>
cuando se aplica esta transformación en el documento XML proporcionado:
<PersonList>
<Person>
<Name>Sonu Kapoor</Name>
<Age>24</Age>
<Gender>M</Gender>
<PostalCode>54879</PostalCode>
</Person>
<Person>
<Name>Jasmin</Name>
<Age>28</Age>
<Gender>F</Gender>
<PostalCode>78745</PostalCode>
</Person>
<Person>
<Name>Josef</Name>
<Age>232</Age>
<Gender>F</Gender>
<PostalCode>53454</PostalCode>
</Person>
</PersonList>
el resultado deseado, correcto se produce:
<PersonList>
<Person>
<Name>Sonu Kapoor</Name>
<Age>24</Age>
<Gender>M</Gender>
<PostalCode>54879</PostalCode>
</Person>
<Person>
<Name>Jasmin</Name>
<Age>31</Age>
<Gender>X</Gender>
<PostalCode>78745</PostalCode>
</Person>
<Person>
<Name>Josef</Name>
<Age>232</Age>
<Gender>F</Gender>
<PostalCode>53454</PostalCode>
</Person>
</PersonList>