Php 如何从包含html标记但作为内容一部分的xml文件中获取节点的内容

Php 如何从包含html标记但作为内容一部分的xml文件中获取节点的内容,php,xml,Php,Xml,具有这样形成的xml文件: <chapter id="1"> <text line="1"> <p>HTML content 1</p> </text> <text line="2"> <q>HTML<q> content 2 </text> <text line="3"> HTML <b>content 3<b> </text>

具有这样形成的xml文件:

<chapter id="1">
  <text line="1"> <p>HTML content 1</p> </text>
  <text line="2"> <q>HTML<q> content 2 </text>
  <text line="3"> HTML <b>content 3<b> </text>
</chapter>

HTML内容1

HTML内容2 HTML内容3
使用DOMDocument,我可以使用什么查询来获取与包含HTML标记的
关联的所有内容?输出某物,如:

<p>HTML content 1</p>
<q>HTML<q> content 2
HTML <b>content 3<b>
HTML内容1

HTML内容2 HTML内容3
PS:从笔记上看,我认为哪个问题问的问题不同。我只是想问一下,如果可能,以及如何处理节点内的内容,忽略html标记(如果存在),而不可能修改原始xml。

您的xml字符串无效,您必须首先将
文本中的
内容
节点转换为htmlEntities,例如:

$textContent = htmlentities($text);
在这之后,我们有:

$xmlText = '<chapter id="1">
  <text line="1"> &lt;p&gt;HTML content 1&lt;/p&gt; </text>
  <text line="2"> &lt;q&gt;HTML&lt;q&gt; content 2 </text>
  <text line="3"> HTML &lt;b&gt;content 3&lt;b&gt; </text>
</chapter>';
更新1 如果无法更改XML字符串,则需要使用regex而不是htmlDom

function get_tag_contents( $tag, $xml ) {
    preg_match_all( "#<$tag .*?>(.*?)</$tag>#", $xml, $matches );

    return $matches[1];
}

$invalidXml = '<chapter id="1">
  <text line="1"> <p>HTML content 1</p> </text>
  <text line="2"> <q>HTML<q> content 2 </text>
  <text line="3"> HTML <b>content 3<b> </text>
</chapter>';

$textContents = get_tag_contents( 'text', $invalidXml );

foreach ( $textContents as $content ) {
    echo $content;
}
函数获取标签内容($tag,$xml){
preg#u match_all(“#(.*?)#,$xml,$matches);
返回$matches[1];
}
$invalidXml=
HTML内容1

HTML内容2 HTML内容3 '; $textContents=获取标签内容('text',$invalidXml); foreach($textContents作为$content){ echo$内容; }
可能重复的文件存在问题,我无法修改原始文件。在上面的例子中,我复制了一个真实的情况,所以我需要工作的il文件给我的数据。我已经更新了我的答案,请检查,它现在符合您的要求
function get_tag_contents( $tag, $xml ) {
    preg_match_all( "#<$tag .*?>(.*?)</$tag>#", $xml, $matches );

    return $matches[1];
}

$invalidXml = '<chapter id="1">
  <text line="1"> <p>HTML content 1</p> </text>
  <text line="2"> <q>HTML<q> content 2 </text>
  <text line="3"> HTML <b>content 3<b> </text>
</chapter>';

$textContents = get_tag_contents( 'text', $invalidXml );

foreach ( $textContents as $content ) {
    echo $content;
}