我有一个xml文件和一个xslt文件。
xml文件有一个xmlns="exa:com.test“属性。
如果在xml中删除这个属性,xslt中的xpath语句就可以工作。但是如果我离开它,就不能工作了。
我正在使用以下代码混合xml和xslt:
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(HttpContext.Current.Server.MapPath("xslt\\searchresults.xslt"));
transformer.Transform(xmlreader, null, utf8stringwriter);
我做错了什么?如果xml的顶部有xmlns属性,我如何混合xml和xslt呢?
发布于 2010-05-19 10:57:47
不带前缀名称的xmlns
属性将替换默认名称空间,以便您的查询匹配具有不同(空)名称空间的节点。您需要在XSLT XPath查询中使用带前缀的名称空间(或者对于孤立的XPath查询使用XmlNamespaceManager
),您的查询将按预期再次工作。
在XSLT中:
<xsl:stylesheet ... xmlns:exa="exa:com.test">
然后,假设您曾经匹配实例xyz
,现在您可以像这样更改查询:
<xsl:template match="exa:xyz"> ...
通常,您可能希望阅读一些关于XML名称空间的文档。
发布于 2010-05-19 13:32:26
但是需要注意的是,尽管名称空间字符串只是被视为一个确切的文字字符串,它被用作没有其他含义的标识符。该字符串必须符合IANA uri,这是为了保证命名空间的唯一性。一些解析器拒绝解析不符合的命名空间。
还要注意,因为它们是字符串,所以http://www.w3.org/1999/xhtml
和例如http://w3.org/1999/xhtml/
用于名称空间的目的是完全不同的名称空间。
您可能希望阅读XML中的名称空间是如何工作的。据我所知,exa:com.test
不是有效的名称空间字符串。
https://stackoverflow.com/questions/2864819
复制相似问题