xml - XSLT 仅在出现任何子节点时立即调用
问题描述
我有两个可能的输入 XML,如下所示。我希望仅获取父母帐户信息并忽略下的帐户<line>
。
尝试使用//account
and .//account
,两者都返回所有帐户段,因此每个 xml 的计数分别为 2 和 4。期望计数是 1 和 2<account>
xml1:
<?xml version="1.0" encoding="UTF-8"?>
<inventory>
<account>
<seg1>123</seg1>
<seg2>qwe</seg2>
</account>
<line>
<account>
<seg1>123</seg1>
<seg2>qwe</seg2>
</account>
</line>
</inventory>
xml2:
<?xml version="1.0" encoding="UTF-8"?>
<inventory>
<accounts>
<account>
<seg1>123</seg1>
<seg2>qwe</seg2>
</account>
<account>
<seg1>456</seg1>
<seg2>abc</seg2>
</account>
</accounts>
<line>
<accounts>
<account>
<seg1>123</seg1>
<seg2>qwe</seg2>
</account>
<account>
<seg1>456</seg1>
<seg2>abc</seg2>
</account>
</accounts>
</line>
</inventory>
所以我希望只读取即时帐户信息并忽略<line>
段下的帐户
解决方案
要同时满足 xml 1 和 2,请使用
[not(ancestor-or-self::line)]
这是xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<inventory>
<xsl:copy-of select="//*[not(ancestor-or-self::line)]/account"/>
</inventory>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- reactjs - 在哪里放置需要访问 redux-state 的辅助函数?
- php - 从android发送的数据在php文件中的问题无法处理
- python - VSCode 运行 Python 2 而不是 3
- stm32 - stm32:20次后添加新节点到链表,然后系统崩溃了
- java - BigDecimal 科学计数法 String 和普通 String
- typescript - TypeScript 接口函数参数传递
- node.js - 找不到文件 - http://localhost/path-file-script-or-image
- c# - 如何在 c# 中使用 selenium webdriver 捕获请求和响应
- r - 如何使用 if 语句将一个 df 中的值替换为另一个 df 中的值
- aws-lambda - 如何将 AWS API Gateway 超时设置为高于 30 秒?