1

xslt を使用して 2 つの xml ファイルを 1 つにマージしたいと考えています。

file1:

<cut> <content1> .... </content1> </cut>

file1:

<cut> <content2> .... </content2> </cut>

merged:
<cut>
<content1> ... </content1>
<content2> ... </content2>
</cut>

マージするファイルを含む xslt にパラメーターを渡したいと思います。

xsltproc.exe" --stringparam ファイル 1 s:\file1.xml --stringparam ファイル 2 s:\file2.xml s:\merge.xslt

merge.xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:exsl="http://exslt.org/common"
    extension-element-prefixes="exsl">

  <xsl:output indent="yes" omit-xml-declaration="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:param name="file1"/>
  <xsl:param name="file2"/>

  <xsl:variable name="big-doc-rtf">
    <xsl:copy-of select="document($file1)"/>
    <xsl:copy-of select="document($file2)"/>
  </xsl:variable>

  <xsl:variable name="big-doc" select="exsl:node-set($big-doc-rtf)"/>

  <xsl:template match="/">
    <cut>
      <xsl:apply-templates select="$big-doc/cut/*"/>
    </cut>
  </xsl:template>

  <xsl:template match="*">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@*|text()|comment()|processing-instruction()">
    <xsl:copy-of select="."/>
  </xsl:template>

</xsl:stylesheet>

空の「カット」タグしか取得しません。なにが問題ですか?

4

3 に答える 3

4

xsltproc ではなくxmllintを使用:

(編集: xsltproc は xinclude も許可します)

--xinclude : ドキュメント入力で XInclude 処理を行います

x1.xml

<cut><content1>content1</content1></cut>

x2.xml

<cut><content2>content2</content2></cut>

x3.xml

<?xml version="1.0"?>
<cut xmlns:xi="http://www.w3.org/2003/XInclude">
  <xi:include href="x1.xml" parse="xml" xpointer="xpointer(/cut/content1)"/>
  <xi:include href="x2.xml" parse="xml" xpointer="xpointer(/cut/content2)"/>
</cut>

走る:

$ xmllint -xinclude  x3.xml 
<?xml version="1.0"?>
<cut xmlns:xi="http://www.w3.org/2003/XInclude">
  <content1>content1</content1>
  <content2>content2</content2>
</cut>
于 2012-09-07T15:30:24.710 に答える
1

問題を再現できません

ほとんどのdocument()場合、コード内の両方の関数が「何も返しません」-これは、各呼び出しの最初の引数として使用されるURIがファイルを識別しない(ファイルが見つからない/解決できない)か、ファイルに含まれていないことを意味します整形式の XML ドキュメント。

于 2012-09-07T14:27:19.330 に答える
0

これは、document() 呼び出しでハードコードされたパスを持つ xalan および saxon パーサーでうまく機能しました。問題は、何らかの理由で xsl がドキュメントを認識していない可能性があります。

エラーが発生する可能性が高いため、ソース ドキュメントの xml に問題があるとは思えません。

于 2012-09-07T14:44:52.530 に答える