JSON2 XML: содержимое не разрешено в прологе - PullRequest
0 голосов
/ 06 апреля 2020

Моя ошибка **SXXP0003: Error reported by XML parser: Content is not allowed in prolog**. Я использую Windows-10 и saxon9.jar файл. Как устранить эту ошибку?

В моем command prompt я использую:

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" -s:"simple3.json"

Мой JSON это:

{"analystId": "Test","jobId": "","profileData": {"allAuthorCoverage": false,"assetClasses": [{ "code": "Test1"}]}} `

MY XSLT is:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" /> 
  <xsl:strip-space elements="*"/>
  <xsl:param name="jsonText"/>

  <xsl:template match="@*|node()"> 
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template> 

  <xsl:template name="init">
    <xsl:apply-templates select="json-to-xml($jsonText)"/> 
  </xsl:template>

 <xsl:template match="*[@key]" >
  <xsl:element name="{@key}">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Вам необходимо удалить опцию -s, поскольку она используется только для ввода XML. Так что используйте

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" 

Как вы объявили <xsl:param name="jsonText", я думаю, что вы также хотите передать параметр

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" jsonText=JSONGoesHere

, хотя в зависимости от вашей оболочки командной строки может быть трудно передать JSON с кавычками напрямую. Возможно, используйте JSON в файле и передайте имя файла / URI, а затем используйте unparsed-text($json-file).

Мне также интересно, почему вы, похоже, используете Saxon 9.7, первую версию Saxon для реализации XSLT 3 и Стандарт XPath 3.1 - это Saxon 9.8, поэтому для работы с функциями, указанными в XSLT 3 и / или XPath 3.1, было бы лучше использовать Saxon 9.8 или новее.

0 голосов
/ 06 апреля 2020

Я использую Saxon 9.9 (HE), и мой Updatd XSL:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" /> 
  <xsl:strip-space elements="*"/>
  <xsl:param name="jsonText"/>
  <xsl:param name="input" select="'simple3.json'"/>

 <xsl:template match="@*|node()"> 
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
 </xsl:template> 

 <xsl:template name="init">
    <xsl:apply-templates select="json-to-xml(unparsed-text($input))" mode="copy"/>
 </xsl:template>

 <xsl:template match="node() | @*" mode="copy">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*" mode="copy"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

В моей командной строке: c:transform -it:"init" -xsl:simple3.xsl -o:out.xml

Спасибо за предложение Margin Honnen. Работает нормально.

...