Я пытаюсь запустить deep-equal function, чтобы сравнить 2 последовательности узлов. Для последовательностей, которые, как я ожидаю, будут согласованы, единственная разница будет заключаться в том, что некоторые каретки возвращаются здесь и там и дополнительный элемент ID
для одной из последовательностей.xslt - Использование глубокого равенства по нормализованному тексту
Так, например:
<body>
<section>
<p>that's a paragraph</p>
<p @class="p1">that's another paragraph</p>
</section>
</body>
и:
<body>
<section id="1">
<p id="2">that's a
paragraph</p>
<p @class="p1" id="3">that's another paragraph</p>
</section>
</body>
Для меня, это совпадение.
Теперь deep-equal не нравится возврат каретки и идентификатор. Поэтому я пытался изменить его, чтобы убедиться, что он все еще соответствует.
Использование remove-attributes-deep, я завернут глубоко равен:
<xsl:function name="functx:deep-similar" as="xs:boolean">
<xsl:param name="seq1" as="item()*"/>
<xsl:param name="seq2" as="item()*"/>
<xsl:variable name="seq1-noId" select="functx:remove-attributes-deep($seq1,'id')"/>
<xsl:variable name="seq2-noId" select="functx:remove-attributes-deep($seq2,'id')"/>
<xsl:sequence select="every $i in 1 to max((count($seq1-noId), count($seq2-noId)))
satisfies deep-equal($seq1-noId[$i], $seq2-noId[$i])"/>
</xsl:function>
Этот код в основном код из sequence-deep-equal с remove-attributes-deep поверх него.
Теперь я хотел бы настроить его, чтобы нормализовать пространства.
Как я могу нормализовать отдельный текст() каждого узла последовательности, сохраняя узлы, чтобы я мог работать с ними на одном уровне после обновления? Мне нужно, чтобы он находился внутри самой функции.
Я не могу скрыть свои файлы, некоторые пространства имеют решающее значение для меня.
Вы должны взглянуть на функцию [normalize-space] (http://www.xsltfunctions.com/xsl/fn_normalize-space.html) – potame
yes, но она возвращает только строку. Как я могу перестроить узел с нормализованным текстом? – Flag
Почему у вас есть требование «Мне нужно, чтобы он находился внутри самой функции»? Я бы предложил написать некоторые шаблоны с определенным режимом, который разделяет атрибуты, которые вы хотите разбить и нормализовать текстовые узлы по своему усмотрению (или, возможно, присвоить значения), а затем вы можете использовать шаблоны приложений в своих входных последовательностях в этом режиме и сравните результат. –