4

XSL スタイルシートに複数の XML ドキュメントを含めてアクセスしようとすると問題が発生します。ドキュメント ノードを変数として割り当ててから、次のように xsl:template でそれらにアクセスしようとしています。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
  <xsl:output method="xml" omit-xml-declaration="yes" />

  <xsl:variable name="doc1" select="document('test.xml')" />

  <xsl:template match="/">
  <div>
    <span id="id_total">
      <xsl:value-of select="count($doc1//Root)"/>
    </span>
  </div>
  </xsl:template>

</xsl:stylesheet>

IE と Firefox を使用すると正しいカウントが得られますが、WebKit ブラウザー (Safari、Chrome) ではカウントが 0 になります。何か考えはありますか?

4

2 に答える 2

0

Google は、.xml ファイルが file:// URL から .xlst ファイルを読み取れるようにすることはセキュリティ ホールであると判断し、ブロックしました。

chrome.exe コマンド ライン オプション --allow-file-access-from-files は、このセーフガードを回避します。

于 2012-12-17T02:46:58.717 に答える
0

Chrome には、ローカル ファイルのインクルードを防止するクロスオリジン ポリシーがあります。ドキュメント関数は、ローカルでのみ参照できます。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="pitarget.xml"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
                >
<xsl:variable name="gal" select="'howdy'"/>
<?var gal?><!--howdy-->
<?echo gal?>
<?html5 ?>

<xsl:output method="html" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" />

<xsl:template match="xsl:stylesheet">
  <xsl:apply-templates select="processing-instruction()"/>
</xsl:template>

<xsl:template match="/">
  <xsl:value-of select="processing-instruction('html5')"/>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    </head>
    <body>
      <xsl:apply-templates/>
    </body>
  </html>
</xsl:template>


<xsl:template match="processing-instruction('echo')">
  <xsl:value-of select="//xsl:variable/@select[../@name=current()]"/>
  <xsl:value-of select="count(document('pitarget.xml')//*) - 1"/>
</xsl:template>

<xsl:template match="processing-instruction('var')">
  <xsl:processing-instruction name="{.}">
    <xsl:value-of select="."/>
    <xsl:value-of select="./following-sibling::node()"/>
  </xsl:processing-instruction>
</xsl:template>

</xsl:stylesheet>
于 2012-02-17T02:44:22.557 に答える