Новичок здесь с XSLT. Я создаю один XML из другого XML. Каждый XML следует за разными XSD, но очень похож. Я предоставляю список необходимых элементов, которые должны присутствовать в окончательном выпуске xml. Поэтому у меня есть xpath всех необходимых элементов. Мой вопрос в том, как я могу гарантировать, что требуемые элементы существуют, а если нет, я должен сгенерировать требуемые элементы в выходном XML-файле.XML-XML с использованием XSLT: как проверить, существует ли элемент в выводе xml, и если не создать элемент со значением по умолчанию
Таким образом, мой подход: быть источником XML и выход XML (целевой XML) будет очень похож с небольшими различиями (XSD на 90% одинаковы). Я сначала копирую весь xml с шаблоном преобразования идентификаторов. Затем мне нужно выполнить некоторую проверку необходимых элементов, чтобы убедиться, что они присутствуют в дереве результатов.
Например:
Учитывая этот XML:
<?xml version="1.0" encoding="UTF-8"?>
<orders>
<order>
<order_id>555435699</order_id>
<products>
<product>Book1</product>
<product>Book2</product>
</products>
<customer>
<name>Mike Smith</name>
<address>1222 N 1st St, Chicago IL</address>
</customer>
</order>
</orders>
ВЫВОД должно быть что-то вроде:
<?xml version="1.0" encoding="UTF-8"?>
<orders>
<order>
<order_id>555435699</order_id>
<products>
<product>Book1</product>
<product>Book2</product>
</products>
<customer>
<name>Mike Smith</name>
<address>1222 N 1st St, Chicago IL</address>
<phone>555-555-5555</phone> <!-- Required element 'phone' needs to be populated with default value in output if it doesn't exist -->
</customer>
</order>
</orders>
нужно быть уверенным, телефон данные клиента существует или должен быть создан с невыполнением значение «555-555-5555
<xsl:if test="not(node_xpath)">
<!-- need to add the element -->
</xsl:if>
Как мы выполняем проверку в xslt, используя «if» и «test». Я видел, как они использовались здесь и там. Сделайте это в отдельном шаблоне, или они должны быть включены. Как это должно применяться для примера выше?
UPDATE:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- copy entire xml from source xml file -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- need to check for required tags - - HOW TO INTEGRATE THIS PART -->
<xsl:if test="not(orders/order/customer/phone)">
<phone>555-555-5555</phone>
</xsl:if>
</xsl:stylesheet>
Есть ли у нее быть просто XSLT? Потому что у меня возникнет соблазн предложить предварительную обработку его скриптом. – Sobrique
Можете ли вы опубликовать свой текущий XSLT? –
опубликовал то, что я пытался сделать – user1899872