Jak chcesz używać XPath (PHP) Aktualizacja plik?
XPath jest język zapytań dla dokumentów XML Jako taki, tylko wyrażenie XPath nie może modyfikować dokumentu XML - może tylko wybrać węzły lub inne dane z niego.
Zmodyfikowany dokument XML może być wytwarzany za pomocą języka programowania, który obsługuje silnik XPath - może to być XSLT, C#, Java, PHP, ...
I muszę zmień wartości Wiek i Płeć, gdzie jest "Jasmin".
Oto prosta transformacja XSLT, który wytwarza nowy dokument XML zgodnie z tymi wymaganiami:
<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>
kiedy ta transformacja jest stosowane na dostarczonym dokumencie XML:
<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>
pożądany, prawidłowy wynik jest produkowany:
<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>