【发布时间】:2022-01-17 17:45:54
【问题描述】:
我一直在搜索 StackOverflow 一段时间但没有成功。我的目标是过滤 Employee XML 文档。输入 XML 有大约 9000 名员工,并且我有多个目标系统,它们需要基于每个目标系统的不同选择标准的这些员工记录的子集。 样本输入:
<Employees>
<Employee>
<id>1</id>
<name>Name1</name>
</Employee>
<Employee>
<id>2</id>
<name>Name2</name>
</Employee>
<Employee>
<id>3</id>
<name>Name3</name>
</Employee>
<Employee>
<id>4</id>
<name>Name4</name>
</Employee>
</Employees>
输出应该具有相同的结构,但根据选择标准(XPATH)减少了节点。 如何将动态 XPath 传递给 XSLT 样式表并将过滤后的员工作为输出? 请注意完整的 Xpath 表达式以及过滤条件作为一个字符串传递。
期望的输出:
<Employees>
<Employee>
<id>2</id>
<name>Name2</name>
</Employee>
<Employee>
<id>3</id>
<name>Name3</name>
</Employee>
</Employees>
【问题讨论】:
-
维护根节点是可选的。根节点可以忽略,输出也可以是多个匹配选择条件的员工节点。
-
在 XSLT 3 中使用静态参数和影子属性这很简单,但您需要使用 XSLT 3 处理器及其 API 或接口才能使用该功能。
-
您可能会考虑在您的程序中仅使用 XPath 进行过滤,例如在 C# 中使用 XmlDocument.SelectNodes( "//your/dynamic/xapth[@filter=1]" )。然后在 XSL 中格式化结果。