【发布时间】:2016-08-16 18:59:25
【问题描述】:
.Net XSLT 解析器无法识别父属性(类型),如果该节点有子节点(贡献者)。以下场景返回空,但如果我删除子节点,则返回正确的结果。
输入 XML
<contributors>
<roles>
<role type="Actor">
<contributor />
</role>
</roles>
</contributors>
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<a>
<xsl:value-of select="contributors/roles/role/@type" />
</a>
</xsl:template>
</xsl:stylesheet>
输出
<a></a>
我的 C# 方法
public static XDocument TransformXML(string inputXMLString, string xslt)
{
var xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(inputXMLString));
inputXMLString = xmlDocumentWithoutNs.ToString();
var xslCompiledTransform = new XslCompiledTransform();
using (var stringReader = new StringReader(xslt))
using (var xmlReader = XmlReader.Create(stringReader))
{
xslCompiledTransform.Load(xmlReader);
}
using (var stringReader = new StringReader(inputXMLString))
using (var xmlReader = XmlReader.Create(stringReader))
using (var stringWriter = new StringWriter())
{
xslCompiledTransform.Transform(xmlReader, new XsltArgumentList(), stringWriter);
var resultXML = stringWriter.ToString();
var otuput = XDocument.Parse(resultXML);
return otuput;
}
}
【问题讨论】:
-
您要“删除”什么子节点?您在哪里看到“父属性”?
-
与 xalanj 和 xsltproc 中的贡献者子节点正常工作,奇怪