2016-12-09 2 views
1

Любая помощь будет оценена по этому поводу. Я хочу взять значение из одного XML-файла и вносить его в другой XML, используя PHP. Я буду принимать любые другие методы трансформации, если они будут работать.Добавление данных из одного файла XML в другой - PHP

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 с дочерними свойствами, чтобы соответствовать 2000 из XML 2 и выводить в том же формате, что и XML 1, в соответствии с моим примером вывода.

спасибо.

****** ****** EDIT

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

Я отделяю XML от PDF (XML 1), и я могу передать его через модуль преобразования XSLT для экспорта в CSV.

XML 2 извлекается из базы данных и может храниться в статической папке.

См. Ниже скриншот с аннотациями.

Могу ли я жестко задавать путь к файлу XML 2 в XLT Transform для вставки данных?

enter image description here

+0

Пожалуйста, создайте [Minimal, Complete, и Проверяемость] (http://stackoverflow.com/help/mcve) код PHP. Что вы уже пробовали? Нам будет легче помочь вам. –

+0

Привет, Александр, извиняюсь, я не могу создать PHP-код для вас, поскольку я не владею PHP. Я только что редактировал php-код в прошлом для выполнения таких задач, и я знаю, что могу использовать его с помощью программного обеспечения, которое я использую в соответствии с моим редактированием. Я пробовал различные «в программном обеспечении» попытки выполнить эту задачу, однако их здесь не стоит упоминать. michael.hor257k ниже очень близок с его XSLT, однако у меня возникают проблемы с его вытягиванием значения из XML2. – James

ответ

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

Привет, Майкл, спасибо за ваш ответ.Это выглядит очень многообещающим, однако единственным препятствием, которое у меня есть, является то, что я не могу передать параметры XSL. Я добавил редактирование на свой пост, чтобы объяснить. Можно ли жестко кодировать путь XML2? – James

+0

Я пробовал вашу формулу и получил некоторые результаты. XSLT добавляет поля в файл XML1, однако он не добавляет значения и, кажется, не пропускает открывающий тег для него. Я предполагаю, что это потому, что я пытался жестко кодировать путь файла XML2. Не могли бы вы указать, где я ошибаюсь? MY EDIT к коду: РЕЗУЛЬТАТ ДОБАВЛЕНО XML1: <поле Id = "AnyID"> TotalPrice строка ложные James

+1

Да, путь может быть жестко закодированы. Однако путь - это строка, ее нужно указывать. Или - предпочтительно - используйте его как литерал: '/Users/universalgraphics/Desktop/CSV/XML Merge/42442.xml'. –

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