Transforming xml using xsl for integrating systems
嗨,我正在尝试使用xsl将这个xml转换为正确的格式。我是xsl的新手,遇到了问题。我需要通过应用程序将xml导入数据库。
我不需要通知中的所有属性。我已经尝试了xsl中的for-each标签。这会遍历所有项目,但我只希望选择其中的几个项目,然后自己添加其他数据,例如max:ponum,max:DOROLLOVER。
。
要转换的xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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> |
所需格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?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> |
我写的xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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中,
跟随XSLT生成(几乎)所需的输出,但
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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> |
输出XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?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> |
输出的另一个不同之处是