PHP |如何查找xml

时间:2015-05-07 11:41:20

标签: php xml tags

我想构建一个这样的函数:

function getTagNameOfGivenContent($content){...}

这是xml的一个例子:

<w:r>
    <w:rPr>
        <w:rFonts w:cs="Arial" />
        <w:sz w:val="18" />
        <w:szCs w:val="18" />
    </w:rPr>
    <w:t>tfInvLineTaxCode</w:t>
</w:r>

所以当我像这样调用函数时

getTagNameOfGivenContent('tfInvLineTaxCode')

它会返回

<w:t>tfInvLineTaxCode</w:t>

有谁能告诉我如何构建这个功能?

2 个答案:

答案 0 :(得分:1)

这是一个......

的解决方案
  1. 将XML加载到DOMDocument然后......
  2. 创建一个DOMXPath对象,其中包含...
  3. 运行XPath query以查找匹配text内容的第一个节点。
  4. 如果找到,则返回该节点的标记。如果没有,则返回 null
  5. 代码:

    $source = <<<EOX
    <root xmlns:w="whatever">
        <w:r>
            <w:rPr>
                <w:rFonts w:cs="Arial" />
                <w:sz w:val="18" />
                <w:szCs w:val="18" />
            </w:rPr>
            <w:t>tfInvLineTaxCode</w:t>
        </w:r>
    </root>
    EOX;
    
    // Create/load a DOMDocument and a DOMXPath instance 
    $dom = new DomDocument();
    $dom->loadXML($source);
    $xpath = new DOMXPath($dom);
    
    function getTagNameOfGivenContent($content)
    {
        // Query XPath instance for first node with a text that matches $content
        global $xpath;
        $tags = $xpath->query('//*[text()="' . $content .'"][1]');
    
        if ($tags->length > 0) {
            // We got a match
            $tag = $tags->item(0);
            return $tag->ownerDocument->saveXML($tag);
        }
    
        // No match
        return null;
    }
    
    // Try it out
    echo getTagNameOfGivenContent('tfInvLineTaxCode');
    

    输出:

    <w:t>tfInvLineTaxCode</w:t>
    

答案 1 :(得分:-1)

也许是这样的:

$dom = new \DOMDocument();

$dom->loadXML($xml_doc);

$script = $dom->getElementsByTagName('script');

更多信息 - &gt; http://php.net/manual/es/class.domdocument.php

我希望它有所帮助。