【问题标题】:cdata-section-elements - for same elements in different XPath cannot be ignoredcdata-section-elements - 不能忽略不同 XPath 中的相同元素
【发布时间】:2015-06-21 06:40:05
【问题描述】:

我有一个特定的模式,其中在目标模式中多次定义了具有不同 Xpath 的相同名称的元素。例如:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Root>
    <Record> // First record
        <Name>test</Name>
        <id>id2</id>
        <Rollno>Rollno3</Rollno>
    </Record>
    <Record1> // Second Record
        <Name>Name6</Name>
        <id>id7</id>
        <Rollno>Rollno8</Rollno>
     </Record>
</Root>

以上是正在使用的 XML,名称是考虑的元素。

由于我在 XSL 中使用 cdata-section-elements="Name" 进行转换。

虽然我只希望Record1Name 元素的输出位于CDATA 中,而不是Record/Name 的输出。到目前为止,所有名称元素的输出都来自 CDATA。有人可以帮忙吗?

【问题讨论】:

  • 为什么你需要输出是CDATA?使用 CDATA 生成输出会使下游解析和处理变得更加困难。
  • 这是一个特殊要求,其中一个元素需要 Cdata 而另一个元素不需要。

标签: xml xslt saxon


【解决方案1】:

序列化程序中的 cdata-section-elements 参数无法为您提供这种级别的控制。

您的要求很难实现,因此我认为 Mads Hansen 询问您为什么真正需要它是很合理的。 CDATA 经常被不当使用。

实现该要求的一种方法可能是在结果树中为您希望成为 CDATA 的元素使用不同的元素名称,然后对序列化程序输出进行后处理以将元素名称改回。

另一种方法是使用字符映射生成 CDATA 标记(输出特殊字符,例如来自 Unicode 用户定义的字符范围,以指示 CDATA 部分的开始和结束,然后将这些字符映射到 CDATA 开始和结束标签)。

【讨论】:

  • 谢谢你,迈克,虽然我也在 Saxonica 支持中发布了同样的内容:),谢谢你的回复
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 2022-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多