Добавьте дополнительное пространство имен / схемы размещения в XML-файл, используя XSLT - PullRequest
0 голосов
/ 02 февраля 2011

Я хочу преобразовать:

<ppx xmlns="http://www.p.com/ppx/1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd">
<p></p></ppx>

в:

<ppx xmlns="http://www.p.com/ppx/1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:ppxx="http://www.m.com/mExt/v1" 
xmlns:ppxtpx="http://www.m.com/mExt/v3" 
xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd 
http://www.m.com/mExt/v1 http://www.m.com/mExt/v1/ppxv1.xsd 
http://www.m.com/mExt/v3 http://www.m.com/mExt/v3/ppxv3.xsd">
<p></p></ppx>

Мне нужно добавить несколько объявлений пространства имен и связанные с ними схемы расположения в существующий файл XML, не изменяя ничего вэтот XML.

1 Ответ

1 голос
/ 02 февраля 2011

В принципе это просто: ему просто нужен стандартный шаблон "модифицированного шаблона личности":

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<xsl:template match="ppx">
<ppx xmlns="http://www.p.com/ppx/1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:ppxx="http://www.m.com/mExt/v1" 
  xmlns:ppxtpx="http://www.m.com/mExt/v3" 
  xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd 
    http://www.m.com/mExt/v1 http://www.m.com/mExt/v1/ppxv1.xsd 
    http://www.m.com/mExt/v3 http://www.m.com/mExt/v3/ppxv3.xsd">
    <xsl:apply-templates/>
  </ppx>
</xsl:template> 

Однако, это может быть немного сложнее, в зависимости от того, насколько сильно могут отличаться входные данные от примера, который вы нам показали. Например, если корневой элемент не всегда будет иметь имя ppx, или если пространства имен, которые будут добавлены, заранее неизвестны. Поэтому, возможно, вам придется объяснить более подробную информацию о проблеме

...