Выберите строку параметра XSLT, указанную в командной строке.

Я использую параметры XSLT для установки абсолютного пути в атрибуте во время выполнения с помощью Xalan-C. По сути, мой входной XML выглядит примерно так: -

<root xmlns="initial">
  <!-- document goes here -->
</root>

Моя таблица стилей: -

<xsl:stylesheet version="1.0" xmlns:s="initial" xmlns="final" />

  <xsl:param name="default_data_location">/path/to/some/location</xsl:param>

  <xsl:template match="//s:*">
    <xsl:element name="{local-name()}" namespace="final">
      <xsl:attribute name="dataLocation">
        <xsl:value-of select="concat($default_data_location, '/datafile')"/>
      </xsl:attribute>
    </xsl:element>
  </xsl:template>

  <!-- rest of the stylesheet -->

</xsl:stylesheet>

Таким образом, мой желаемый выходной XML, когда я запускаю его как: -

Xalan foo.xml foo.xsl 

должно быть (это часть, которая работает): -

<root xmlns="final" dataLocation="/path/to/some/location/datafile">
  <!-- document goes here -->
</root>

И когда я запускаю его как: -

Xalan -p default_data_location /some/other/path foo.xml foo.xsl

это должно быть (и это та часть, которая не работает): -

<root xmlns="final" dataLocation="/some/other/path/datafile">
  <!-- document goes here -->
</root>

Однако, если я попытаюсь установить этот параметр в командной строке, он даст мне следующий XML:

<root xmlns="final" dataLocation="/datafile">
  <!-- document goes here -->
</root>

Что я должен делать?


person owagh    schedule 01.10.2012    source источник


Ответы (1)


Значение параметра похоже на выражение XPath, поэтому вам нужно убедиться, что вы передаете строку XPath, и вам может потребоваться двойные кавычки, чтобы убедиться, что оболочка командной строки не мешает вам, поэтому выполнение Xalan -p default_data_location "'/some/other/path'" foo.xml foo.xsl должно работать. По крайней мере, так я прочитал документацию по адресу http://xml.apache.org/xalan-c/commandline.html, у меня нет Xalan-C для тестирования.

person Martin Honnen    schedule 01.10.2012
comment
нет не работал. Я перепробовал все возможные комбинации включения в '' и . На самом деле, это, вероятно, не из-за строки xpath. Он просто не выводит никакого значения, даже если я передаю какой-то мусор, скажем, Xalan -p default_data_location 'sdndsa' на самом деле не работает. - person owagh; 01.10.2012
comment
Я думаю, что оболочка может помешать вам, поэтому я бы попробовал, например, такие вещи, как Xalan -p default_data_location "'/some/other/path'" foo.xml foo.xsl в Windows. Однако сегодня вечером у меня не будет времени на тестирование, надеюсь, другие пользователи Xalan-C смогут помочь. - person Martin Honnen; 01.10.2012
comment
это было все. Я не уверен, как я пропустил это в своем отчаянном поиске грубой силы. Обновите свой ответ, и я отмечу его как принятый. - person owagh; 01.10.2012