xml - XSLT - 克隆 XML 过滤掉数组元素
问题描述
我有一个 XML 结构,我需要删除数组的所有元素,除了最后一个保持完全相同的结构。我需要使用 XSLT 转换来实现这一点。该结构由几个嵌套数组组成。最后一个是一组“价值观”,除了最后一个我不感兴趣。这就是为什么我需要删除“属性”元素下的所有“值”元素,除了最后一个元素。我不是 XSL 转换方面的专家,因此将不胜感激。
原始 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://schemas.myorg.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Schema="RSXML4.5" xsi:schemaLocation="http://schemas.myorg.com/RSXml4.5.xsd">
<Entities Name="Delta Export">
<Entity Id="15273739" Name="Entity1">
<Attributes>
<Attribute Id="4012" Name="Height">
<Values>
<Value Id="169384125" Action="NoChange">91</Value>
</Values>
</Attribute>
<Attribute Id="4148" Name="Channel">
<Values>
<Value Id="169384649" Action="NoChange">USA</Value>
<Value Id="169384652" Action="NoChange">BLR</Value>
</Values>
</Attribute>
</Attributes>
<Relationships />
</Entity>
<Entity Id="15279499" LongName="Entity2">
<Attributes>
<Attribute Id="4097" Name="Long Description">
<Values>
<Value Id="169384290" Action="NoChange">Kentucky</Value>
</Values>
</Attribute>
<Attribute Id="4098" Name="Short Description">
<Values>
<Value Id="169384297" Action="NoChange">Kent</Value>
<Value Id="169384298" Action="NoChange">Kent</Value>
</Values>
</Attribute>
</Attributes>
</Entity>
</Entities>
</Data>
预期的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://schemas.myorg.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Schema="RSXML4.5" xsi:schemaLocation="http://schemas.myorg.com/RSXml4.5.xsd">
<Entities Name="Delta Export">
<Entity Id="15273739" Name="Entity1">
<Attributes>
<Attribute Id="4012" Name="Height">
<Values>
<Value Id="169384125" Action="NoChange">91</Value>
</Values>
</Attribute>
<Attribute Id="4148" Name="Channel">
<Values>
<Value Id="169384652" Action="NoChange">BLR</Value>
</Values>
</Attribute>
</Attributes>
<Relationships />
</Entity>
<Entity Id="15279499" LongName="Entity2">
<Attributes>
<Attribute Id="4097" Name="Long Description">
<Values>
<Value Id="169384290" Action="NoChange">Kentucky</Value>
</Values>
</Attribute>
<Attribute Id="4098" Name="Short Description">
<Values>
<Value Id="169384298" Action="NoChange">Kent</Value>
</Values>
</Attribute>
</Attributes>
</Entity>
</Entities>
</Data>
谢谢
解决方案
你知道如何应用 xslt 吗?如果是这样,试试这个:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0">
<xsl:output method="xml" encoding="ISO-8859-1"/>
<xsl:template match="/">
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|*[name()!='Value' or position()=last()]"/>
<xsl:value-of select="text()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- python - Python Flask POST 方法引发服务器过载和内部服务器错误
- c - 通过指针后预测结果
- ios - 快速排序对象数组
- splunk - 如何在 Splunk 中应用多重加法
- python - Anaconda 安装不正确
- git - 使用父目录中的 .gitignore 从搜索结果中排除文件
- bluetooth-lowenergy - 有没有办法在 BlueZ 中创建多连接 BLE 设备?
- json - 如何以 Json 格式、键和值保存而不重复 ansible 事实
- python - Pandas 将每列与前 4 行聚合在一起
- reactjs - 检查字段是否有效 Formik React JS