【问题标题】:PHP XML tags nested in continuing text -> simpleXML嵌套在连续文本中的 PHP XML 标记 -> simpleXML
【发布时间】:2014-06-11 15:13:26
【问题描述】:

我正在处理大部分未知内容的 XML。 我正在将其转换为非常粗略的 HTML 输出。

但我在 XML 中遇到了这种结构:

<wrappingTag>
    text text text
    <formatTag>formatted text</formatTag>
    continued text text text text 
    <formatTag2>much more formatted text</formatTag2>
    continued text text text text 
</wrappingTag>

当我使用 simpleXML 元素获取数据时,simpleXML 将所有普通文本作为“wrappingTag”中的值返回,但不包含“formatTag”值中的部分。这些当然是分开的。 因此,对我来说,将文本像以前一样放在一起似乎是不可能的。

有没有简单的方法在 simplexml 中解决这个问题,还是我必须自己解析?

感谢

亚历克斯

【问题讨论】:

    标签: php xml simplexml


    【解决方案1】:

    DOM 不会受此影响,您可以将它们相互转换。

    $element = simplexml_load_string($xml);
    $node = dom_import_simplexml($element);
    var_dump($node->nodeValue);
    

    DOMElement::$nodeValue 是所有后代文本节点(包括 cdata)的文本内容。

    从节点获取文本内容的另一种可能性是 DOMXPath::evaluate()。

    $dom = new DOMDocument();
    $dom->loadXml($xml);
    $xpath = new DOMXpath($dom);
    var_dump($xpath->evaluate('string(//wrappingTag[1])'));
    

    演示:https://eval.in/161109

    【讨论】:

    • 感谢您的提示,这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2023-01-23
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多