【发布时间】:2013-11-04 23:04:22
【问题描述】:
我正在尝试在 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 节点。
任何建议将不胜感激!
【问题讨论】: