我需要将内容存储在 xml 数据库中。数据库中的一些数据如下所示:
<item>
<span class ="person">Henry 8<sup>th</sup></span>
</item>
<item>
<span class="company">Berkley & Jensen</span>
</item>
我需要将数据加载到 dom 对象中,loadXML()
然后将其传递给 xsl 样式表,在该样式表中使用 xpath 和 css 对其进行进一步操作。当我加载数据时,代码会因为“&”而中断,并且我不想转换所有实体,因为我需要<sup>
在“类”上使用 css 和 xpath,并且我怀疑编码实体会导致它们失败。我应该如何存储和检索非法字符?
由于评论,我提供了一个示例 php 脚本。如果您添加它应该运行的 php 标签。感谢您的 CDATA 建议。我用它来演示这个问题。如果我尝试使用“块”标签作为 XPATH 的目标,它可以正常工作,但如果我尝试使用“跨度”标签,它不会打印任何内容。
$xsl = <<<XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="doContent" match="/">
<div class="story">
<xsl:for-each select="//body/block"> <xsl:copy-of select="." />
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>
XSL;
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<content id="test" >
<headline>test</headline>
<author>test</author>
<body>
<block id="1"><![CDATA[<span class="normal"><p>1</p></span>]]></block>
<block id="2"><![CDATA[<span class=""><p>2</p></span>]]></block>
<block id="3"><![CDATA[<span class ="person">Henry 8<sup>th</sup></span>]]></block>
<block id="4"><![CDATA[<span class="company">Berkley & Jensen</span>]]></block>
<block id="5"><![CDATA[<span class=""><p>5</p></span>]]></block>
<block id="6"><![CDATA[<span class=""><p>6</p></span>]]></block>
</body>
</content>
XML;
$xslDoc = new DOMDocument();
$xslDoc->loadXML($xsl);
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xml);
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);