XSLT - 根据某些条件更改xml中元素的值

时间:2016-05-18 15:42:44

标签: xslt xslt-1.0

我需要根据输入xml中某些元素的值来修改xml的内容。

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<Objects>
<Object class="Item" version="1.0" distName="A-1/B-1/Item-0">
 <p name="sDate">2013-02-11T00:00:00+02:00:00</p>
 <p name="present">1</p>
 <p name="stopD">2013-02-21T00:00:00+02:00:00</p>
 <p name="id">CPU</p>
</Object>
<Object class="Item" version="1.0" distName="A-1/B-1/Item-1">
 <p name="sDate">2013-02-11T00:00:00+02:00:00</p>
 <p name="present">1</p>
 <p name="stopD">2013-02-21T00:00:00+02:00:00</p>
 <p name="id">CPU</p>
</Object>
</Objects>

XSL应根据其值更改元素的值。 对于Eg: 在节点中,如果元素 sDate 的值为 2013-02-11T00:00:00 + 02:00:00 ,我需要把它变成空的,如下图所示。

输出XML:

<?xml version="1.0" encoding="UTF-8"?>
<Objects>
<Object class="Item" version="1.0" distName="A-1/B-1/Item-0">
<p name="sDate"></p>
<p name="present">1</p>
<p name="stopD">2013-02-21T00:00:00+02:00:00</p>
<p name="id">CPU</p>
</Object>
<Object class="Item" version="1.0" distName="A-1/B-1/Item-1">
<p name="sDate"></p>
<p name="present">1</p>
<p name="stopD">2013-02-21T00:00:00+02:00:00</p>
<p name="id">CPU</p>
</Object>
</Objects>

我尝试了一些xsl,但无法让这个东西工作..任何潜在客户?

1 个答案:

答案 0 :(得分:0)

你的问题不太清楚。以下样式表将完全符合您的要求 - 但我不确定它是否提供了一般示例:

XSLT 1.0

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.qwest.com/XMLSchema" >
   <soapenv:Header/>
   <soapenv:Body>

+ xmlObject.toXML()

+  </soapenv:Body>
</soapenv:Envelope>

注意

  

在节点中,如果元素 sDate 的值为   2013-02-11T00:00:00 + 02:00:00

您的XML中没有<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="p[@name='sDate'][.='2013-02-11T00:00:00+02:00:00']"> <p name="sDate"/> </xsl:template> </xsl:stylesheet> 个节点,也没有Item元素。