我正在为结构不统一的XML苦苦挣扎。第一个<Report_Data>
应该是第二个和第三个<Report_Data>
的引用。因此,将发生以下情况:当GL_Code
和Code
与PT-BU_Code
相同时,必须复制它们的元素值。如果第一<Report_Data>
的第二<Report_Data>
和第三<RaaSData>
<Report_Data xmlns:wd="urn:com.bsvc">
<Report_Entry>
<PT-BU>A0003 SPL</PT-BU>
<PT-BU_Code>A0003</PT-BU_Code>
</Report_Entry>
<Report_Entry>
<PT-BU>CAN01 RIS</PT-BU>
<PT-BU_Code>CAN01</PT-BU_Code>
</Report_Entry>
<Report_Entry>
<PT-BU>NL001 REG</PT-BU>
<PT-BU_Code>NL001</PT-BU_Code>
</Report_Entry>
<Report_Entry>
<PT-BU>ZA009 CJH</PT-BU>
<PT-BU_Code>ZA009</PT-BU_Code>
</Report_Entry>
</Report_Data>
<Report_Data xmlns:wd="urn:com.bsvc">
<Report_Entry>
<GL_Code>A0003</GL_Code>
<Book_Code>G</Book_Code>
</Report_Entry>
<Report_Entry>
<GL_Code>A0003</GL_Code>
<Book_Code>L</Book_Code>
</Report_Entry>
<Report_Entry>
<GL_Code>CAN01</GL_Code>
<Book_Code>L</Book_Code>
</Report_Entry>
</Report_Data>
<Report_Data xmlns:wd="urn:com.bsvc">
<Report_Entry>
<Cost_Center>67902 CC</Cost_Center>
<COMPANY>
<Code>A0003</Code>
</COMPANY>
</Report_Entry>
<Report_Entry>
<Cost_Center>99999 CC</Cost_Center>
<COMPANY>
<Code>A0003</Code>
</COMPANY>
<COMPANY>
<Code>NL001</Code>
</COMPANY>
</Report_Entry>
</Report_Data>
</RaaSData>
上没有其他详细信息,则这些条目必须保留。
PT-BU_Code
我不太确定如何启动XSLT,但这是我想要实现的输出示例(基于<Report_Data>
的升序)。请注意,根据第二个和第三个Company;Code;Cost Center;Book Code
A0003 SPL;A0003;67902 CC;G
A0003 SPL;A0003;67902 CC;L
A0003 SPL;A0003;99999 CC;G
A0003 SPL;A0003;99999 CC;L
CAN01 RIS;CAN01;;L
NL001 REG;NL001;99999 CC;
ZA009 CJH;ZA009;;
中给出的元素值,将生成新条目,并且所有条目都是唯一的。
class MyDd extends React.Component {
state = {options: []}
onSearchChange = (e, value) => {
axios.get(`/api/match?query=${value.searchQuery}`)
.then((response) => {
this.setState({options: response.data})
})
}
render() {
return (
<Dropdown
onSearchChange={this.onSearchChange}
search
selection
options={this.state.options}
/>
)
}
}
答案 0 :(得分:0)
您可以使用按键查找公司并预订信息
<xsl:key name="book" match="Report_Entry" use="GL_Code" />
<xsl:key name="company" match="Report_Entry" use="COMPANY/Code" />
但是,这变得有些混乱,因为您需要检查您是否有一本书,但没有公司,或者一家公司却没有书,或者两者都不是。
尝试使用此XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="book" match="Report_Entry" use="GL_Code" />
<xsl:key name="company" match="Report_Entry" use="COMPANY/Code" />
<xsl:template match="RaaSData">
<xsl:text>Company;Code;Cost Center;Book Code </xsl:text>
<xsl:for-each select="Report_Data[1]/Report_Entry">
<xsl:variable name="bu" select="PT-BU_Code" />
<xsl:variable name="prefix" select="concat(PT-BU, ';', $bu, ';')" />
<xsl:for-each select="key('company', $bu)">
<xsl:variable name="company" select="Cost_Center" />
<xsl:for-each select="key('book', $bu)">
<xsl:value-of select="concat($prefix, $company, ';', Book_Code, ' ')" />
</xsl:for-each>
<xsl:if test="not(key('book', $bu))">
<xsl:value-of select="concat($prefix, $company, ';', ' ')" />
</xsl:if>
</xsl:for-each>
<xsl:if test="not(key('company', $bu))">
<xsl:for-each select="key('book', $bu)">
<xsl:value-of select="concat($prefix, ';', Book_Code, ' ')" />
</xsl:for-each>
<xsl:if test="not(key('book', $bu))">
<xsl:value-of select="concat($prefix, ';', ' ')" />
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>