如何在PHP中使用simplexml\u load\u字符串来获取没有嵌入标记的innertext?

如何在PHP中使用simplexml\u load\u字符串来获取没有嵌入标记的innertext?,php,xml,simplexml,Php,Xml,Simplexml,我找到了一个新的。大多数专利的部分XML具有以下结构: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]> <us-patent-grant lang="EN" dtd-version="v4.5 2014-04-03" file="US09226443-20160105.XML" statu

我找到了一个新的。大多数专利的部分XML具有以下结构:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.5 2014-04-03" file="US09226443-20160105.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20151221" date-publ="20160105">
  ...
  <claims>
    ...
    <claim id="CLM-00015" num="00015">
      <claim-text>15. The system of <claim-ref idref="CLM-00013">claim 13</claim-ref>, wherein ...</claim-text>
    </claim>
  </claims>
</us-patent-grant>
我尝试执行
simplexml\u load\u string
函数,如下所示:

$xml = simplexml_load_string($xmlTxt, 'SimpleXMLElement', LIBXML_NOCDATA);
但它没有改变任何事情。

我需要做什么才能将
claim ref
标记中的文本保留为
claim text
标记中CDATA的一部分?请注意,我不需要保留实际的
claim ref
标记,只需保留其中的文本。

在示例XML中没有CDATA部分。CDATA部分在XML中如下所示:

<foo><![CDATA[<bar>text</bar>]]></foo>
输出:

string(39) "15. The system of claim 13, wherein ..."
或者使用
DOMXpath::evaluate()
,而不使用SimpleXML:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

var_dump($xpath->evaluate('string(/us-patent-grant/claims/claim/claim-text)'));

您的意思是希望
claim ref
元素在输出中完整显示(标记、属性和全部),还是只希望
claim ref
元素的文本内容显示在输出中?仅显示文本。我修改了我的问题以反映这一点。谢谢您的提问。请确认,这与CDATA无关,只是嵌套节点。你更可能在搜索中发现有帮助的关键词是“内部文本”(或“内部文本”)。是的,你说得对。不过,我不知道如何最好地表达这个问题。后来我编辑了它。谢谢。这比我想要的要复杂,但它解决了我的问题。非常感谢。
$patentGrant = new SimpleXMLElement($xml);
$node = dom_import_simplexml($patentGrant->claims->claim->{'claim-text'});

var_dump($node->textContent);
string(39) "15. The system of claim 13, wherein ..."
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

var_dump($xpath->evaluate('string(/us-patent-grant/claims/claim/claim-text)'));