1

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 のご提案ありがとうございます。私はそれを使用して問題を示しました。「block」タグを XPATH のターゲットとして使用しようとすると正常に動作しますが、「span」タグを使用しようとすると何も出力されません。

$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);
4

2 に答える 2

0

それをラップします<![CDATA[]]>

<item>
    <![CDATA[<span class="company">Berkley & Jensen</span>]]>
</item>

CDATA の詳細: XML の <![CDATA[]]> とはどういう意味ですか?

于 2013-11-07T09:11:40.370 に答える