Невозможно разделить и объединить в XSLT - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть Xml

<input Inputxml="&ltOrder..&lt;LinePPlineNO=&quot;1@quot;Line/&gt; &gt;" >

Как удалить некоторую часть строки, используя xsl .. для, например, мне нужно удалить целую строку из &lt; до &gt; для PPline 1

Мне нужно разделить строку на 3 части, удалить строку из lt в gt и объединить часть 1na dpart 3 строки

  <Test Attrib1="b" Attrib2="C" Inputxml="
      &lt;OrderLine  OrderedQty="1" PrimeLineNo="1" ShipNode="ABC" $gt;
       &lt;/OrderLine $gt;
     &lt;OrderLine OrderedQty="1" PrimeLineNo="2" ShipNode="ABC"  $gt;      
  &lt;/OrderLine $gt;" />

Например, я могуу меня есть 100 строк ордеров, но мне нужно найти строку с первичной линией 1 и удалить ее. Поэтому, если мне нужно запомнить линию, я должен удалить ее из lt;до gt;

1 Ответ

0 голосов
/ 09 ноября 2019

Ваш пример сбивает с толку. Если у вас есть ввод XML, например:

<input Inputxml="&lt;order&gt;&lt;Line PPlineNO=&quot;1&quot;&gt;Bingo&lt;/Line&gt;&lt;/order&gt;"/>

, где атрибут Inputxml содержит экранированный XML:

<order><Line PPlineNO="1">Bingo</Line></order> 

, вы можете использовать:

<xsl:template match="input">
    <result>
        <xsl:value-of select="substring-before(substring-after(@Inputxml, 'PPlineNO=&quot;1&quot;&gt;'), '&lt;/Line&gt;')" />
    </result>
</xsl:template>

чтобы получить:

<result>Bingo</result>

Обратите внимание, что это не хороший способ разбора XML (или, скорее, того, что раньше было XML). Было бы намного разумнее сначала удалить его, а затем проанализировать как XML. В XSLT 3.0 вы можете использовать для этого функцию parse-xml(). В XSLT 1.0 / 2.0 вы можете:

<xsl:value-of select="@Inputxml" disable-output-escaping="yes"/>

сохранить результат в файл и обработать полученный файл, используя другую таблицу стилей XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...