如何从转换中用xsi:nil =“true”排除元素?

时间:2010-02-01 19:15:59

标签: xml xslt xml-nil

我有一些最近更改的XML文件,因此某些节点现在具有属性xsi:nil =“true”。我有一个XSLT样式表,它将XML呈现为HTML,以便快速观察数据。目前为了让自己更容易,我在应用样式表之前从XML中删除了名称空间。这工作正常,直到我们上次更新。现在我收到一个错误,因为XSL不知道如何处理xsl:nil =“true”。

我可以轻松更新代码,所以我在转换之前对XML中的所有xsl:nil =“true”匹配进行替换/删除,但我想知道是否可以修改XSLT样式表即使XML中没有包含名称空间,xsi:nil将被忽略/不会导致转换失败。我更喜欢这样做,因为我现在可以在服务器上进行更改,如果我必须发布新的Web构建,我必须跳过一些内部环节来部署它。

在我开始工作之后(通过在转换之前或转换过程中删除xsl:nil)我会回过头来找出为什么我最初删除名称空间并修复它。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

为什么首先删除名称空间? XSLT允许您控制不应将哪些前缀放入输出中,您可以在样式表中很好地跳过xsi:nil

如果xsi前缀没有名称空间前缀声明,则XML无效。所以要么你正在处理无效的XML,要么你仍然在某处有一些XSI名称空间声明,你可以改变XSLT来跳过这些条目。

如果你在XML源代码上进行find-replace,请务必稍后(很快!)修复它,因为这种东西会破坏你的想法。