任何帮助将不胜感激。我希望从一个XML文件中获取一个值,并使用PHP将其输入到另一个XML中。如果他们有效,我会接受任何其他转型方法。
XML 1
<field-list>
<field Id="spMF_1_1634">
<tag>Customer Name</tag>
<type>string</type>
<required>true</required>
<value>1Test</value>
</field>
<field Id="spMF_2_1634">
<tag>Job Reference</tag>
<type>string</type>
<required>false</required>
<value>42442</value>
</field>
XML 2
<Log>
<DataSource>Data_source</DataSource>
<SQLStatement>SELECT TotalPrice FROM vwQuotations WHERE reference = 'REF42442'</SQLStatement>
<SQLStatementResult>Success</SQLStatementResult>
<SQLStatementValue>
<Row>
<Column Name="TotalPrice" DataType="REAL">2000</Column>
</Row>
</SQLStatementValue>
</Log>
输出/结果我正在寻找:
<field-list>
<field Id="spMF_1_1634">
<tag>Customer Name</tag>
<type>string</type>
<required>true</required>
<value>1Test</value>
</field>
<field Id="spMF_2_1634">
<tag>Job Reference</tag>
<type>string</type>
<required>false</required>
<value>42442</value>
</field>
<field Id="AnyID">
<tag>TotalPrice</tag>
<type>string</type>
<required>false</required>
<value>2000</value>
</field>
第三个字段(2000)的值实际上是我需要添加到第一个XML中的。
正如您所看到的,两种XML格式不同。 我希望我已经清楚地解释了自己。
总结一下,我希望在XML 1中添加一个额外字段,其中子属性与XML 2中的2000匹配,并按照我的输出示例以与XML 1相同的格式输出。
谢谢。
****** ****** EDIT
我正在使用自动化软件来处理这些文件,所以遗憾的是我无法将参数传递给XML。
我正在从PDF(XML 1)中删除XML,我可以通过XSLT转换模块将其传递给CSV。
XML 2是从数据库中提取的,可以保存在静态文件夹中。
请参见下面带注释的屏幕截图。
我可以将XML 2文件路径硬编码到XLT转换中以插入数据吗?
答案 0 :(得分:2)
您可以告诉处理器处理第一个XML并将路径作为参数传递给第二个XML。然后使用样式表:
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:param name="path-to-file2"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field-list">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<field Id="AnyID">
<tag>TotalPrice</tag>
<type>string</type>
<required>false</required>
<value>
<xsl:value-of select="document($path-to-file2)/Log/SQLStatementValue/Row/Column"/>
</value>
</field>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>