1

私はここで単純なものが欠けていることを知っていますが、それを理解することはできません。他にも、より複雑なXMLとXSLTが機能していますが、何らかの理由で、この特定のXMLとXSLTを実行できません。シリアル化中に生成されるのはXMLファイルの構造だと思います。

私が探しているのは、XML要素の値を取得してHTMLで表示することです。この問題に関連する特定の領域を除いて、他のすべてを取り除きました。

コードの「html」変数では、locationの値は常に空白です。

XML

<WidgetBuilder>
  <DefaultLocation>1234</DefaultLocation>
</WidgetBuilder>

XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes" />

  <xsl:template match="/">
    LOCATION: '<xsl:value-of select="DefaultLocation" />'
  </xsl:template>

</xsl:stylesheet>

コード

string xml = File.ReadAllText(@"..\..\InitXml1.xml");
string xslt = File.ReadAllText(@"..\..\InitXslt1.xslt");

XPathDocument doc = new XPathDocument(new StringReader(xml));
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(XmlReader.Create(new StringReader(xslt)));

StringWriter sw = new StringWriter();
xslTransform.Transform(doc, null, sw);

string html = sw.ToString();
Console.WriteLine(html);
4

1 に答える 1

3

XSLテンプレートは、ドキュメント要素ではなく、ドキュメントルートノードと一致します(同じものではありません)。試す:

<xsl:value-of select="WidgetBuilder/DefaultLocation" />

編集:また、デフォルトの名前空間を使用しているため、スタイルシートから表示できるようにする必要があります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:dc="schemas.datacontract.org/2004/07/YourFullClassName"
                version="1.0" exclude-result-prefixes="msxsl">
    <xsl:output method="html" indent="yes" />

    <xsl:template match="/">
    LOCATION: '<xsl:value-of select="dc:WidgetBuilder/dc:DefaultLocation" />'
    </xsl:template>

</xsl:stylesheet>

詳細な説明とその他の使用例については、こちらをご覧ください。

于 2011-02-15T21:26:18.623 に答える