我正在尝试在将 XSLT 文档移交给 XML 转换之前对其进行一些后处理。我认为最好的选择是将它作为 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 节点。
任何建议将不胜感激!