Удалить префикс пространства имен для элементов, сгенерированных картой XSLT - PullRequest
0 голосов
/ 01 мая 2018

Моя карта XSLT генерирует элементы, для которых все имеют префикс ns0. Вот пример:

<ns0:EXF_tImportTableLog class="entity">
    <ns0:AmountInclVat>2457.7</ns0:AmountInclVat>
    <ns0:CompanyId>DC</ns0:CompanyId>
    <ns0:Credit>0</ns0:Credit>

Я хочу удалить эти префиксы. Это начало моего XSLT-кода:

<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var ScriptNS0 userCSharp ScriptNS1" version="1.0" xmlns:st="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes" xmlns:ns0="http://Edi-Portal/Datacon/Documents/PurchaseInvoice" xmlns:ScriptNS0="http://schemas.microsoft.com/BizTalk/2003/ScriptNS0" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp" xmlns:ScriptNS1="http://schemas.microsoft.com/BizTalk/2003/ScriptNS1">
  <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
  <xsl:template match="/">
    <xsl:apply-templates select="/ns0:PurchaseInvoice_Cdm_Xml" />
  </xsl:template>
  <xsl:template match="/ns0:PurchaseInvoice_Cdm_Xml">

Я думаю, что моя проблема в том, что пространство имен по умолчанию не объявлено, поэтому маппер автоматически устанавливает префикс для каждого элемента. Я использую Visual Mapper в Visual Studio, поэтому этот код генерируется автоматически.

Схема ввода не имеет этого префикса, поэтому я не уверен, почему он генерируется. Можно ли исправить в Visual Mapper, или мне нужно что-то изменить в коде XSLT?

1 Ответ

0 голосов
/ 01 мая 2018

Фрагмент кода XSLT, который вы нам показали, не содержит инструкций по созданию элементов, поэтому мы не можем сказать вам конкретно, что вы делаете неправильно.

Истинная проблема не в префиксах, а в том, что элементы имеют неправильное расширенное имя (расширенное имя = URI пространства имен + локальное имя).

Существует три способа создания элемента в дереве результатов:

(a) с использованием буквального элемента результата. В этом случае расширенное имя элемента в результирующем дереве будет таким же, как расширенное имя элемента в таблице стилей

(b) используя xsl: copy / xsl: copy-of. В этом случае расширенное имя элемента в дереве результатов будет совпадать с расширенным именем элемента в исходном документе

(c) с использованием xsl: element. (c1) с атрибутом пространства имен, в этом случае элемент будет в пространстве имен, идентифицируемом этим атрибутом, или (c2) без атрибута пространства имен, и в этом случае пространство имен зависит от пространств имен в области действия в таблице стилей.

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

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