0

私はこれでどこに行きますか。xslt シートを使用して変換する必要がある XML ドキュメントがあります。私のコードは次のとおりです。

        Dim xStream As New IO.MemoryStream

        ' Create the XslCompiledTransform and load the stylesheet.
        Dim xslt As New XslCompiledTransform()
        xslt.Load(strLKxsl)

        ' Create the XslCompiledTransform and load the stylesheet.
        Dim xslt As New XslCompiledTransform()
        xslt.Load(strXSLfolder & "xslt_lookup.xslt")

        ' Create the XsltArgumentList.
        Dim xslArg As New XsltArgumentList()

        Using w As XmlWriter = XmlWriter.Create(xStream)
            ' Transform the file.
            xslt.Transform(xmldLookup, Nothing, w)
        End Using

xslt.Transform(xmldLookup, Nothing, w) 行で次のエラーが発生します。

EndRootElement 状態のトークン StartElement は、無効な XML ドキュメントになります。XML フラグメントを作成する場合は、ConformanceLevel 設定が ConformanceLevel.Fragment または ConformanceLevel.Auto に設定されていることを確認してください。

これは、XML ファイルの内容です。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="includes/xslt_lookup.xslt"?>
<lookup xmlns="logis-online:lk"
title="<Document Title>"
nexturl="<URL>">

  <search visible="false">
    <field id="SUPPLIER_NO" hidden="true" size="10"
    value="<Value>" />
    <field id="WEB_STORE_NO" hidden="true" size="10"
    value="<Value>" />
    <field id="REST" hidden="true" size="40" value="" />
    <field id="LOOKUP_ACTION" hidden="true" size="1" value="<Value>" />
    <field id="WEB_ACTION" hidden="true" size="2" value="<Value>" />
  </search>
  <results>
    <header>
      <section>
        <item id="SUPPLIER_NO" title="Supplier No" value="<Value>"
        HelpID="10" />
        <item id="SUPPLIER_NAME_SHORT" title="Supplier Name"
        value="<Value>" HelpID="10" />
        <item id="LIABLE_STORE_NO" title="Liable Store No"
        value="<Value>" HelpID="98" />
      </section>
    </header>
    <list target="<lookup aspx page>" />
  </results>
</lookup>
4

2 に答える 2

1

この問題はおそらく、XSLT コードが整形式の XML ドキュメントではなく、おそらく複数の最上位要素を持つフラグメントにすぎない出力を作成することが原因で発生します。それは XSLT で可能であり、単にファイルまたはストリームに書き込むだけであれば、問題はないはずです。あなたのコードは、説明していない理由で、MemoryStream を介して XmlWriter を構築します。デフォルトでは、XmlWriter.Create(stream) で作成された XmlWriter は、出力が整形式の XML ドキュメントであることを確認し、そうでない場合は例外をスローします。したがって、問題を回避するには、XmlWriter をまったく作成せず、単に作成します。

xslt.Transform(xmldLookup, Nothing, xStream)

または、XslCompiledTransform インスタンスの OutputSettings を使用して XmlWriter を作成します。

Using xw As XmlWriter = XmlWriter.Create(xStream, xslt.OutputSettings)
于 2011-06-02T12:54:14.663 に答える
0

このメッセージは一目瞭然です。これは、XSLT 変換の結果が整形式のドキュメントではないことを意味し、XmlWriter にそのようなものを強制的に書き込むには、その ConformanceLevel 設定を または のいずれかに設定/指定する必要がありConformanceLevel.FragmentますConformanceLevel.Auto。「XmlWriter とデータの適合性」の詳細については、こちらをご覧ください。

XSLT 変換が XML ドキュメントを生成することを意図していない場合は、結果を生成するために XmlWriter を指定しないことをお勧めします。より適切な選択は、TextWriter 引数を受け入れる Transform() オーバーロードを使用することです。

それ以外の場合は、(XmlWriter を指定せずに) ストリームに直接書き込むことができます。

または、適切なXmlWriterSettings (またはを指定) を使用して XmlWriter を作成しますConformanceLevel.FragmentConformanceLevel.Auto

または、XSLT 変換で XML ドキュメントを生成する必要がある場合は、デバッグして修正します。

于 2011-06-02T12:54:27.040 に答える