我有以下XML文档(只是摘录):
<osm>
<node id="1" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.0" lon="0.657002">
<tag k="Stat_nr" v="40045"/>
<tag k="Ortsgr_kl" v="0"/>
<tag k="Town_ID" v="0000"/>
<tag k="Name2" v="City2"/>
<tag k="Name1" v="City1"/>
<tag k="ID" v="8942835"/>
</node>
<node id="2" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.93198" lon="0.000">
<tag k="Land" v="D"/>
<tag k="ID_Ref" v=""/>
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="ExampleCity"/>
<tag k="ID" v="0000"/>
</node>
</osm>
我想做的是得到以下结果:
<osm>
<node id="1" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.0" lon="0.657002">
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="City1"/>
<tag k="ID" v="8942835"/>
<tag k="test" v="8942835"/>
</node>
<node id="2" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.93198" lon="0.000">
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="ExampleCity"/>
<tag k="ID" v="0000"/>
<tag k="test" v="0000"/>
</node>
</osm>
删除除以下每个标记之外的所有内容:
<tag k="Stat_nr">
<tag k="Name1" >
<tag k="ID" >
但是也要添加一个复制k="ID" v=
<tag k="test" v="8942835"/>
<tag k="test" v="0000"/>
答案 0 :(得分:1)
鉴于您的XML,通过在结束osm
标记上使用与开始osm
标记相同的大小写来修复格式良好,
<osm>
<node id="1" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.0" lon="0.657002">
<tag k="Stat_nr" v="40045"/>
<tag k="Ortsgr_kl" v="0"/>
<tag k="Town_ID" v="0000"/>
<tag k="Name2" v="City2"/>
<tag k="Name1" v="City1"/>
<tag k="ID" v="8942835"/>
</node>
<node id="2" version="1" timestamp="2016-02-29T01:33:20Z" lat="0.93198" lon="0.000">
<tag k="Land" v="D"/>
<tag k="ID_Ref" v=""/>
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="ExampleCity"/>
<tag k="ID" v="0000"/>
</node>
</osm>
此XSLT,基于身份转换,添加了一个模板以压制所请求的tag
元素,并添加了一个模板以附加请求的tag
元素,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tag[@k!='Stat_nr' and @k!='Name1' and @k!='ID']"/>
<xsl:template match="tag[@k='ID']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<tag k="test" value="{@v}"/>
</xsl:template>
</xsl:stylesheet>
将生成此XML,
<?xml version="1.0" encoding="UTF-8"?>
<osm>
<node id="1"
version="1"
timestamp="2016-02-29T01:33:20Z"
lat="0.0"
lon="0.657002">
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="City1"/>
<tag k="ID" v="8942835"/>
<tag k="test" value="8942835"/>
</node>
<node id="2"
version="1"
timestamp="2016-02-29T01:33:20Z"
lat="0.93198"
lon="0.000">
<tag k="Stat_nr" v="40045"/>
<tag k="Name1" v="ExampleCity"/>
<tag k="ID" v="0000"/>
<tag k="test" value="0000"/>
</node>
</osm>
根据要求。