【发布时间】:2017-06-15 23:13:44
【问题描述】:
我有以下 XML:
<?xml version="1.0"?>
<Transaction>
<Product>
<ProductRq>
<ContactInfo>
<!-- several child elements -->
</ContactInfo>
<OrderInfo>
<!-- several child elements -->
</OrderInfo>
<ProductInfo>
<!-- several child elements -->
</ProductInfo>
<AddressInfo>
<!-- several child elements -->
</AddressInfo>
<AuditInfo>
<!-- several child elements -->
</AuditInfo>
<DeliveryInfo>
<!-- several child elements -->
</DeliveryInfo>
</ProductRq>
</Product>
</Transaction>
为了简洁起见,我在<ProductRq> 标记中省略了几个子元素,其中包含4 或5 个类似于<OrderInfo> 和<CustomerInfo> 的子元素,以及*Info 的子节点元素。
我需要删除 Order 和 <CustomerInfo> 等元素的子元素,同时保留 *Info 标记。在 7 个标签中,大约有 4 个要通过此过程。如果不重复,我想不出该怎么做:
<xsl:template match="Transcation/Product/ProductRq/<tag name here>/*" />
对于<ProductRq> 的每个孩子。有没有办法利用上下文节点(<ProductRq>) 并通过子节点循环,除上述之外删除他们自己的子节点?
编辑:
我添加了<ProductRq> 的剩余子标签。除<AuditInfo> 和<ContactInfo> 之外的所有标签都必须删除其子节点。
【问题讨论】:
-
您实际上不需要在模板匹配中指定完整的 xpath,您只需执行
<xsl:template match="<tag name here>/*" />。如果同一元素可能出现在层次结构中的不同级别并且您需要区分它们,则只需使用完整路径对其进行限定。 -
好吧,我认为 ProductRq 的一些子元素可能会在文档的后面针对不同的标签重复,但 ProducerRq 是唯一的,所以 ProducerRq/
就足够了吗? -
@jbailie1991 - 你真的需要展示那些遗漏的孩子,因为它们与你的问题非常相关。至少显示 ProductRq 的子级。