使用xsl转换xml以集成系统
嗨,我正在尝试使用xsl将此xml转换为正确的格式。我是xsl新手,遇到了一些问题。我需要通过应用程序将xml导入数据库 我不需要通知中的所有属性。我在xsl中尝试了for-each标记。这将遍历这些项目,但我只想选择其中的几个,然后自己添加其他数据,如max:ponum、max:DOROLLOVER 要转换的xml:使用xsl转换xml以集成系统,xml,xslt,mapping,integration,transformation,Xml,Xslt,Mapping,Integration,Transformation,嗨,我正在尝试使用xsl将此xml转换为正确的格式。我是xsl新手,遇到了一些问题。我需要通过应用程序将xml导入数据库 我不需要通知中的所有属性。我在xsl中尝试了for-each标记。这将遍历这些项目,但我只想选择其中的几个,然后自己添加其他数据,如max:ponum、max:DOROLLOVER 要转换的xml: <Notification> <item name="NotificationName" type="Standard">CRHWTL01 Run
<Notification>
<item name="NotificationName" type="Standard">CRHWTL01 Run Hours</item>
<item name="NotificationDescription" type="Standard">wind turbine location 01 run hours</item>
<item name="NotificationState" type="Standard">Trend</item>
<item name="StartTime" type="Standard">10/1/2014 4:35:00 PM</item>
<item name="EndTime" type="Standard">1/1/1970 12:00:00 AM</item>
<item name="TriggerTime" type="Standard">10/1/2014 5:05:00 PM</item>
<item name="Priority" type="Standard">Low</item>
<item name="Target" type="Standard">\\maximo\Turbines\Turbine1</item>
<item name="State" type="Standard">Trend</item>
<item name="NotificationInstanceID" type="Standard">1</item>
<item name="NotificationUniqueID" type="Standard">e4472d26-5366-4e57-bc7c-1af3beb50949</item>
<item name="\\Turbine1|Turbine OK Hours Status"
type="AFAttribute">19850</item>
</Notification>
CRHWTL01运行小时数
风力涡轮机位置01运行小时数
趋势
2014年1月10日下午4:35:00
1970年1月1日12:00:00上午
2014年1月10日下午5:05:00
低
\\maximo\Turbines\Turbine1
趋势
1.
e4472d26-5366-4e57-bc7c-1af3beb50949
19850
所需格式:
<?xml version="1.0" encoding="UTF-8"?>
<SyncMXMETERDATA xmlns:max="http://www.ibm.com/maximo" creationDateTime="2008-09-29T02:49:45" baseLanguage="string" transLanguage="string" messageID="string" maximoVersion="string">
<MXMETERDATASet>
<METERDATA action="Delete" relationship="string" ForInsert="string" transLanguage="string">
<CHANGEDATE changed="false">2008-11-15T16:52:58</CHANGEDATE>
<DOROLLOVER changed="true">false</max:DOROLLOVER>
<INSPECTOR changed="true">string</INSPECTOR>
<ISDELTA changed="false">true</ISDELTA>
<MEASUREDATE changed="true">2018-02-04T14:35:59+00:00</MEASUREDATE>
<MEASUREMENTID changed="true">10</MEASUREMENTID>
<MEASUREMENTVALUE changed="false">1.051732E7</MEASUREMENTVALUE>
<METERNAME changed="false">string</METERNAME>
<POINTNUM changed="true">string</POINTNUM>
<SITEID changed="false">string</SITEID>
</METERDATA>
</MXMETERDATASet>
</SyncMXMETERDATA>
2008-11-15T16:52:58
假的
一串
真的
2018-02-04T14:35:59+00:00
10
1.051732E7
一串
一串
一串
我编写的xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://http://www>w>org/2001/XMLSchema xmlns:maximoMappings="local" exclude-
result_prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<SyncMXMETERDATA xmlns:max="http://www.ibm.com/maximo" messageID="string">
<MXMETERDATASet>
<METERDATA>
<MEASUREMENTVALUE><xsl:value-of
select="Notification[item/@name = 'Turbine1-Turbine OK Hours
Status']"/></MEASUREMENTVALUE>
<POINTNUM>GB1001</POINTNUM>
<DOROLLOVER changed="true">false</DOROLLOVER>
<ISDELTA changed="false">true</ISDELTA>
<MAXINTERRORMSG>string</MAXINTERRORMSG>
</METERDATA>
</MXMETERDATASet>
</SyncMXMETERDATA>
</xsl:template>
</xsl:stylesheet>
在当前(更新的)XSLT中,xsl:stylesheet
包含已断开且未关闭的条目xmlns=”http://http://www>w> org/2001/XMLSchema
此外,结束标记
丢失。
以下XSLT生成(几乎)所需的输出,但
和creationDateTime
-属性除外,该属性作为名为'Turbine1-Turbine OK Hours Status'
的项,且输入XML中未提供creationDateTime
的值:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.3.org/2001/XMLSchema"
xmlns:maximoMappings="local"
exclude-result-prefixes="xsl maximoMappings">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<max:SyncMXMETERDATA xmlns:max="http://www.ibm.com/maximo"
baseLanguage="string" transLanguage="string" messageID="string"
maximoVersion="string">
<max:MXMETERDATASet>
<max:METERDATA action="Delete" relationship="string"
ForInsert="string" transLanguage="string">
<max:POINTNUM>GB1001</max:POINTNUM>
<max:DOROLLOVER changed="true">false</max:DOROLLOVER>
<max:ISDELTA changed="false">true</max:ISDELTA>
<max:MAXINTERRORMSG>string</max:MAXINTERRORMSG>
</max:METERDATA>
</max:MXMETERDATASet>
</max:SyncMXMETERDATA>
</xsl:template>
</xsl:stylesheet>
GB1001
假的
真的
一串
输出XML:
<?xml version="1.0" encoding="UTF-8"?>
<max:SyncMXMETERDATA xmlns:max="http://www.ibm.com/maximo"
xmlns="http://www.3.org/2001/XMLSchema" baseLanguage="string"
transLanguage="string" messageID="string" maximoVersion="string">
<max:MXMETERDATASet>
<max:METERDATA action="Delete" relationship="string"
ForInsert="string" transLanguage="string">
<max:POINTNUM>GB1001</max:POINTNUM>
<max:DOROLLOVER changed="true">false</max:DOROLLOVER>
<max:ISDELTA changed="false">true</max:ISDELTA>
<max:MAXINTERRORMSG>string</max:MAXINTERRORMSG>
</max:METERDATA>
</max:MXMETERDATASet>
</max:SyncMXMETERDATA>
GB1001
假的
真的
一串
输出中的另一个区别是xmlns=”http://www.3.org/2001/XMLSchema
的属性。如果不希望它出现在输出中,可以删除xmlns=http://www.3.org/2001/XMLSchema“
来自
定义。感谢您,我没有意识到我将最大值保留在了所需的格式中。我返回并更改了xsl以省略max,但忘记了输出。有一些基本的错误,但我花了相当长的时间才达到这一点。再次感谢matthias_h@Eoin,如果有帮助,请回答matthias_h的问题。谢谢