0

XML 変換に渡す前に、XSLT ドキュメントに対して後処理を実行しようとしています。XmlDocument としてロードし、通常どおりに SelectNodes を使用して更新するノードをトラバースするのが最善の方法だと思いましたが、必要なノードを見つけるのに問題があるようです。すべてのクエリは、0 個のノードが見つかりました。

名前空間と関係があると思われますが、その方法がわかりません。

サンプル XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" omit-xml-declaration="yes" indent="yes"/>
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      </head>
      <body>
        <a href="/">
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

サンプル C#:

XmlDocument style = new XmlDocument();
style.Load("sample.xslt");
foreach (XmlNode anchor in style.SelectNodes("//a"))
  ...

<a>しかし、タグや、私が試した他のタグが見つかりません。

コードを次のように変更してみました。

XmlDocument style = new XmlDocument();
style.Load("sample.xslt");

XmlNamespaceManager nsmgr = new XmlNamespaceManager(style.NameTable);
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");

foreach (XmlNode anchor in style.SelectNodes("//a", nsmgr))
  ...

これにより、実際にはxsl:接頭辞 (例: .SelectNodes("/xsl:stylesheet")) を持つノードを選択できますが、内部の HTML ノードは選択できません。

どんな提案でも大歓迎です!

4

1 に答える 1

0

HTML 要素が必要であることを XPath セレクターに知らせる必要があります。HTML 要素には接頭辞が付いていませんが、「デフォルトの名前空間」があります。

XPath では、これを反映する必要があります。

名前空間マネージャーの名前空間 uri として" http://www.w3.org/1999/xhtml "をプレフィックスとして "html" を追加します。

次に、XPath の前に html: を付けて、html 要素に関するクエリを実行します。

お役に立てれば、

于 2013-11-04T23:18:35.360 に答える