我正在嘗試轉換我的 XML。我已經能夠讓它部分作業,但我不能讓它正確
我已經包括了我能夠開始作業的內容,以及我試圖讓最終輸出看起來像什么。任何幫助都會很棒。我檢查了多次搜索,但只能讓它作業。
電流輸出:
<?xml version="1.0" encoding="utf-8"?>
<objects>
<object><class>fhwed8885_notices</class><name>notices</name>
<property><name>DocumentInformation</name>
<object><class>fhwed8885_DocumentInformation</class><name>DocumentInformation</name>
<property><name>DocId</name><value>510047</value></property>
<property><name>GenerationType</name><value>pdf</value></property>
<property><name>ReqId</name><value>aaa12345-555435d-ggaade5</value></property>
<property><name>FilePath</name><value>missing</value></property>
</object>
</property>
<property><name>PNAME</name>
<object><class>fhwed8885_PNAME</class><name>PNAME</name>
<property><name>NAME</name><value>JOHN KINGHT</value></property>
<property><name>ADDR01</name><value>1896 KELLER SPRINGS</value></property>
<property><name>ADDR02</name><value></value></property>
<property><name>ADDR03</name><value></value></property>
<property><name>ADDR04</name><value>ADDISON, TX 75181-0000</value></property>
</object>
</property>
</object>
</objects>
XML 輸入:
<objects>
<object class="fhwed8885_notices" name="notices">
<property name="DocumentInformation">
<object class="fhwed8885_DocumentInformation" name="DocumentInformation">
<property name="DocId" value="510047"/>
<property name="GenerationType" value="pdf"/>
<property name="ReqId" value="aaa12345-555435d-ggaade5"/>
<property name="FilePath" value="missing"/>
</object>
</property>
<property name="PNAME">
<object class="fhwed8885_PNAME" name="PNAME">
<property name="NAME" value="JOHN KINGHT"/>
<property name="ADDR01" value="1896 KELLER SPRINGS"/>
<property name="ADDR02" value=""/>
<property name="ADDR03" value=""/>
<property name="ADDR04" value="ADDISON, TX 75181-0000"/>
</object>
</property>
</object>
</objects>
XSLT 轉換:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:apply-templates select="node()"/>
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
尋找
<?xml version="1.0" encoding="utf-8"?>
<notices>
<DocumentInformation>
<DocId>510047</DocId>
<GenerationType>pdf</GenerationType>
<ReqId>aaa12345-555435d-ggaade5</ReqId>
<ReqFilePath>missing</ReqFilePath>
</DocumentInformation>
<PNAME>
<NAME>JOHN KINGHT</NAME>
<ADDR01>1896 KELLER SPRINGS</ADDR01>
<ADDR02/>
<ADDR03/>
<ADDR04>ADDISON, TX 75181-0000</ADDR04>
</PNAME>
</notices>
uj5u.com熱心網友回復:
這是迄今為止最短的(只有一個模板,11 行)解決方案:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="object[@name] | property[not(object)][@name]">
<xsl:element name="{@name}">
<xsl:value-of select="@value"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
當此轉換應用于提供的源 XML 檔案時:
<objects>
<object class="fhwed8885_notices" name="notices">
<property name="DocumentInformation">
<object class="fhwed8885_DocumentInformation" name="DocumentInformation">
<property name="DocId" value="510047"/>
<property name="GenerationType" value="pdf"/>
<property name="ReqId" value="aaa12345-555435d-ggaade5"/>
<property name="FilePath" value="missing"/>
</object>
</property>
<property name="PNAME">
<object class="fhwed8885_PNAME" name="PNAME">
<property name="NAME" value="JOHN KINGHT"/>
<property name="ADDR01" value="1896 KELLER SPRINGS"/>
<property name="ADDR02" value=""/>
<property name="ADDR03" value=""/>
<property name="ADDR04" value="ADDISON, TX 75181-0000"/>
</object>
</property>
</object>
</objects>
產生了想要的結果:
<notices>
<DocumentInformation>
<DocId>510047</DocId>
<GenerationType>pdf</GenerationType>
<ReqId>aaa12345-555435d-ggaade5</ReqId>
<FilePath>missing</FilePath>
</DocumentInformation>
<PNAME>
<NAME>JOHN KINGHT</NAME>
<ADDR01>1896 KELLER SPRINGS</ADDR01>
<ADDR02/>
<ADDR03/>
<ADDR04>ADDISON, TX 75181-0000</ADDR04>
</PNAME>
</notices>
uj5u.com熱心網友回復:
以下轉換應該做到這一點:
<?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" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[@name]">
<xsl:element name="{@name}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<!-- Skip elements that have a child that has the same value for @name-->
<xsl:template match="*[@name=child::*/@name]" priority="2">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="@name|@class"/>
</xsl:stylesheet>
uj5u.com熱心網友回復:
嘗試類似:
XSLT 1.0
<xsl:stylesheet version="1.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="*"/>
<xsl:template match="*[@name]">
<xsl:element name="{@name}">
<xsl:value-of select="@value" />
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
結果與您顯示的結果并不完全相同 - 但我不知道應該洗掉哪一個雙標題。
另請注意,這假定根objects元素只有一個object子元素。否則,結果將是一個 XML 片段,而不是格式良好的 XML 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512772.html
標籤:xmlxslt
