Оператор XML IF ELSE

Для фида Google Shopping мне нужно предоставить Google некоторые переменные продуктов, которые у меня есть.

Кейс: есть 3 уникальных идентификатора продукта:

<!-- Unique Product Identifiers-->
<g:brand>{manufacturer}</g:brand>
<g:gtin>{upc}</g:gtin>
<g:mpn>{sku}</g:mpn>

И один из способов сказать, правда это или ложь:

<g:identifier_exists>TRUE</g:identifier_exists>

g:identifier_exists должен быть истинным, если 1 из 3 идентификаторов заполнен (не нулевой/пустой). Если все 3 пусты, тогда идентификатор должен быть FALSE. Так:

<g:identifier_exists>FALSE</g:identifier_exists>

Возможно ли это с XML?

РЕДАКТИРОВАТЬ: кто-то упомянул XLST, поэтому я попробовал следующее:

<item>
!-- Basic Product Information -->
<g:id>{sku}</g:id>
<title>{name,[substr],[70],[...]}</title>
<description>{description,[html_entity_decode],[strip_tags]}</description>
{G:GOOGLE_PRODUCT_CATEGORY}
{G:PRODUCT_TYPE,[10]}
<link>{url parent}</link>
{G:IMAGE_LINK}
<g:condition>new</g:condition>

<!-- Availability & Price -->
<g:availability>{is_in_stock?[in stock]:[out of stock]:[available for order]}</g:availability>
<g:price>{normal_price,[USD],[0]}USD</g:price>
{G:SALE_PRICE,[USD],[0]}

<!-- Unique Product Identifiers-->
<xsl:choose>
    <xsl:when test=" g:brand != ''' ">
            <g:identifier_exists>TRUE</g:identifier_exists>
        </xsl:when>
        <xsl:when test=" g:gtin != ''' ">
            <g:identifier_exists>TRUE</g:identifier_exists>
        </xsl:when>
    <xsl:when test=" g:mpn != ''' ">
            <g:identifier_exists>TRUE</g:identifier_exists>
        </xsl:when>
        <xsl:otherwise>
            <g:identifier_exists>FALSE</g:identifier_exists>
        </xsl:otherwise>
</xsl:choose>

<!-- Apparel Products -->
<g:gender>{gender}</g:gender>
<g:age_group>{age_group}</g:age_group>
<g:color>{color}</g:color>
<g:size>{size}</g:size>

<!-- Product Variants -->
{G:ITEM_GROUP_ID}

<g:material>{material}</g:material>
<g:pattern>{pattern}</g:pattern>

<!-- Shipping -->
<g:shipping_weight>{weight,[float],[2]}kg</g:shipping_weight>

<!-- AdWords attributes -->
<g:adwords_grouping>{adwords_grouping}</g:adwords_grouping>
<g:adwords_labels>{adwords_labels}</g:adwords_labels>
</item>

person Senta    schedule 18.01.2018    source источник
comment
Да, это возможно. Поместите полный пример xml с XSLT, который вы пробовали   -  person Mark Schultheiss    schedule 18.01.2018
comment
@MarkSchultheiss Я кое-что попробовал. Но это не работает. Я совершенно новичок в XML. Мой код в порядке?   -  person Senta    schedule 18.01.2018


Ответы (1)


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

Примечания о поддерживаемых форматах XML там есть, их два, RSS и ATOM. https://support.google.com/merchants/answer/160567?hl=ru&ref_topic=3163841

Это наша цель, скажем, например, мы выбираем XML-файл в формате RSS в качестве нашего «потока», который необходим в форме, указанной в этой ссылке. Теперь, чтобы сделать это, нам нужно выполнить XSLT-преобразование из нашего источника, каким бы он ни был, в указанный формат RSS.

  1. Файл XML, содержащий информацию (данные), необходимую для создания выходного XML.
  2. Файл XSLT для «преобразования» из формата входного файла. Существует несколько способов фактического «выполнения» XSLT для XML, что дает вам необходимый вывод, некоторую программу, командную строку и т. д. То, что вы используете, зависит от того, что у вас есть в вашей среде. Вот онлайн-ссылка, куда вы можете поместить свой XML и XSLT: http://www.purplegene.com/static/transform.html (я вообще не имею к этому никакого отношения). Вы также можете выполнить это из командной строки, программы C# или Java, некоторых браузеров, некоторого JavaScript в браузере и т. д. Ваш успех может варьироваться.

Затем этот файл XSLT может определить, что вам нужно (у вас есть начало). XSLT — это «программная» часть, XML — это исходная часть. ПРИМЕЧАНИЕ. «1 из 3» кажется «2 из 3» из ссылок/информации, которые я вижу по ссылке, которую я предоставил, И в примере фида оттуда. Есть некоторые другие вопросы, касающиеся условий XSL и т. д., таких как Условный тест вокруг xsl:apply-templates Немного поискать.

Вот простой пример рабочего процесса:

Ввод XML ==> процесс с XSLT ==> созданный XML-канал

Здесь мы можем использовать всю мощь StackOverflow! Вот вопрос с некоторыми XML и XSLT, с которого вы можете начать: Как я могу использовать XSLT для создания канала RSS 2.0 из файла XML?

Подумайте о «шаблоне» и сопоставьте его как часть, которую можно использовать для каждого элемента.

Вот пример выходного документа RSS XML со страницы, на которую я ссылался выше: http://commondatastorage.googleapis.com/newfeedspec/example_feed_xml_rss.xml.zip

Вот ссылка, по которой кто-то хочет ИСПОЛЬЗОВАТЬ RSS для создания новой формы XML: XSLT-преобразование фида продуктов Google xml

person Mark Schultheiss    schedule 18.01.2018
comment
Примечание: поместите это в поиск, посмотрите тысячи примеров: сайт условной обработки xslt: stackoverflow.com - person Mark Schultheiss; 18.01.2018
comment
Спасибо за объяснение, я углублюсь в это и посмотрю, смогу ли я понять это! - person Senta; 22.01.2018