2014-10-03 4 views
1

Привет Я пытаюсь преобразовать этот xml в правильный формат с помощью xsl. Я новичок в xsl, и у меня проблемы. Мне нужно импортировать xml в базу данных через приложение.Преобразование xml с использованием xsl для интегрирующих систем

Мне не нужны все атрибуты извещения. Я пробовал для каждого тега в xsl. Это происходит через элементы, но я хочу только выбрать пару из них, а затем добавить другие данные как max: ponum, max: DOROLLOVER.

XML для преобразования:

<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> 

Желаемая формат:

<?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 Я написал

<?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> 

я его импортируют, но я не получаю данные я требую в базе данных. Любая помощь будет принята с благодарностью.

ответ

1

В вашем текущем (обновленном) XSLT xsl:stylesheet содержит разбитую и незаполненную запись xmlns="http://http://www>w>org/2001/XMLSchema Кроме того, отсутствует закрывающий тег </SyncMXMETERDATA>.
После XSLT производит (почти) желаемого выводе за исключением <max:MEASUREMENTVALUE> и creationDateTime в качестве атрибута по имени элемента 'Turbine1-Turbine OK Hours Status' и значение для creationDateTime не предусмотрены во входном XML:

<?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:

<?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> 

Еще одно различие в выходе является атрибутом xmlns="http://www.3.org/2001/XMLSchema" для <max:SyncMXMETERDATA>. Если вы не хотите его выводить, вы можете удалить xmlns="http://www.3.org/2001/XMLSchema" из определения <xsl:stylesheet>.

+0

Спасибо за то, что я не понял, что оставил max в нужном формате. Я вернулся и изменил xsl, чтобы опустить максимум, но забыл выход. Были некоторые основные ошибки, но мне потребовалось некоторое время, чтобы добраться до этого момента. Еще раз спасибо matthias_h – Eoin

+0

@Eoin, пожалуйста [** accept **] (http://meta.stackoverflow.com/q/5234/234215) ответ matthias_h, если это поможет. Благодарю. – kjhughes

Смежные вопросы