【发布时间】:2019-10-17 16:46:56
【问题描述】:
在 XSLT 方面我是一个完全的新手,所以我正在努力寻找解决我的问题的方法。
我有以下来自 PeopleSoft 的 XML:
<?xml version="1.0"?>
<document>
<ConnectedQuery>
<Employee key="3000862">
<Empl_ID>
<![CDATA[12345678]]>
</Empl_ID>
<Name>
<![CDATA[John Doe]]>
</Name>
<Job key="12345678,0,2018-09-17,0">
<Empl_ID>
<![CDATA[12345678]]>
</Empl_ID>
<Empl_Record>0</Empl_Record>
<Effective_Date>2018-09-17</Effective_Date>
<Effective_Sequence>0</Effective_Sequence>
</Job>
</Employee>
</ConnectedQuery>
</document>
PeopleSoft“有帮助”将所有文本数据放入 CDATA 部分,我想删除 CDATA 并将字符串放在普通文本节点中:
<?xml version="1.0"?>
<document>
<ConnectedQuery>
<Employee key="3000862">
<Empl_ID>12345678</Empl_ID>
<Name>John Doe</Name>
<Job key="12345678,0,2018-09-17,0">
<Empl_ID>12345678</Empl_ID>
<Empl_Record>0</Empl_Record>
<Effective_Date>2018-09-17</Effective_Date>
<Effective_Sequence>0</Effective_Sequence>
</Job>
</Employee>
</ConnectedQuery>
</document>
有人可以指导我在 XSLT 上的正确方向吗?我需要创建我想要的输出?非常感谢提前
【问题讨论】:
-
一个简单的 identity transform 将删除 CDATA 标记。您可能还想添加
normalize-space(),因为 CDATA 块周围的空白是节点值的一部分。 -
所以在被拉到另一个项目之后,我设法回到了这个问题。上面的答案似乎有效......除了在 PeopleSoft 中!我不确定现在为什么会这样(我在 PeopleSoft 中使用的其他 XLST 按预期工作)。有没有其他方法可以实现我可以在 PS 中尝试的相同目标?
-
我怕对PeopleSoft不熟悉,所以不知道。为什么 CDATA 包装器一开始就有问题?任何未来的 XML 解析器都应该能够按原样处理原始 XML。