Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何遍历XML以查找节点?_Php_Xml - Fatal编程技术网

PHP:如何遍历XML以查找节点?

PHP:如何遍历XML以查找节点?,php,xml,Php,Xml,我试图遍历XML以查找特定节点,然后修改其值。我想找到 我该怎么做?下面的xml将是一个字符串 <?xml version="1.0"?> <?xml-stylesheet href="catalog.xsl" type="text/xsl"?> <!DOCTYPE catalog SYSTEM "catalog.dtd"> <catalog> <product description="Cardigan Sweater" p

我试图遍历XML以查找特定节点,然后修改其值。我想找到 我该怎么做?下面的xml将是一个字符串

 <?xml version="1.0"?>
 <?xml-stylesheet href="catalog.xsl" type="text/xsl"?>
 <!DOCTYPE catalog SYSTEM "catalog.dtd">
 <catalog>
    <product description="Cardigan Sweater" product_image="cardigan.jpg">
       <catalog_item gender="Men's">
          <item_number>QWZ5671</item_number>
          <price>39.95</price>
          <size description="Medium">
             <color_swatch image="red_cardigan.jpg">Red</color_swatch>
             <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
          </size>
          <size description="Large">
             <color_swatch image="red_cardigan.jpg">Red</color_swatch>
             <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
          </size>
       </catalog_item>
       <catalog_item gender="Women's">
          <item_number>RRX9856</item_number>
          <price>42.50</price>
          <size description="Small">
             <color_swatch image="red_cardigan.jpg">Red</color_swatch>
             <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
             <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
          </size>
          <size description="Medium">
             <color_swatch image="red_cardigan.jpg">Red</color_swatch>
             <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
             <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
             <color_swatch image="black_cardigan.jpg">Black</color_swatch>
            <identifiers>
                <identifier>
                    <identifier_type>Test</identifier_type>
                    <identifier_value>000000001</identifier_value>
                </identifier>
            </identifiers>
          </size>
          <size description="Large">
             <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
             <color_swatch image="black_cardigan.jpg">Black</color_swatch>
          </size>
          <size description="Extra Large">
             <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
             <color_swatch image="black_cardigan.jpg">Black</color_swatch>
          </size>
       </catalog_item>
    </product>
 </catalog>

PHP有几个用于处理XML的插件。我会从其中一个开始。一种可能是SimpleXMLElement::xpath方法


如果您将整个目录甚至部分内容提交到Web页面,您可能需要考虑,以便不必手动解析XML。

PHPDOM扩展支持完整的XPath 1表达式。

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMxpath($document);


// fetch and modify identifier_value node 
$expression = '(//catalog_item//identifiers/identifier/identifier_value[.="000000001"])[1]';
foreach ($xpath->evaluate($expression) as $identifierValueNode) {
    $identifierValueNode->textContent = '000000042';

    // dump to validate
    var_dump($document->saveXML($identifierValueNode));
}
输出:

string(46) "<identifier_value>000000042</identifier_value>"
string(7) "RRX9856"
float(42.5)
输出:

string(46) "<identifier_value>000000042</identifier_value>"
string(7) "RRX9856"
float(42.5)