После преобразования получается вывод в тексте вместо узлов xml - PullRequest
0 голосов
/ 12 октября 2009

Моя проблема заключается в том, что после выполнения файла xlst я получаю вывод в виде текста в одну строку, но не в xml, как требуется. Мой xml и xslt файл выглядит следующим образом.

<root>
  <Jobs Found="10" Returned="50"> 
  <Job ID="8000000" PositionID="600002"> 
  <Title>Development Manager</Title>  
  <Summary> 
     <![CDATA[ An experienced Development Manager with previous experience leading a small to mid-size team of developers in a Java/J2EE environment. A hands on role, you will be expected to manage and mentor a team of developers working on a mix of greenfield and maintenance projects.&#160;&#160; My client, a well known investment bank, requires an experienced Development Manager to join their core technology team. This t 
  ]]>  
  </Summary> 
  <DateActive Date="2009-10-06T19:36:43-05:00">10/6/2009</DateActive>  
  <DateExpires Date="2009-11-05T20:11:34-05:00">11/5/2009</DateExpires>  
  <DateUpdated Date="2009-10-06 20:12:00">10/6/2009</DateUpdated>  
  <Location> 
    <Country>xxxx</Country>  
    <State>xxx</State>  
    <City>xxx</City>  
    <PostalCode>xxx</PostalCode>  
  </Location> 
  <CompanyName>abc Technology</CompanyName>  
  <BuilderFields />  
  <DisplayOptions />  
  <AddressType>1234</AddressType>  
  </Job> 
      </Jobs>
</root>

Таблица стилей XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
  <xsl:output method="xml" indent="yes" media-type="application/xml" 
              cdata-section-elements="Summary"/> 

   <!-- default: copy everything using the identity transform --> 
   <xsl:template match="@*|node()"> 
      <xsl:copy> 
         <xsl:apply-templates select="@*|node()"/> 
      </xsl:copy> 
   </xsl:template> 

   <!-- override: for Location and Salary nodes, just process the children --> 
   <xsl:template match="Location|Salary"> 
      <xsl:apply-templates select="node()"/> 
   </xsl:template> 

   <!-- override: for selected elements, convert attributes to elements --> 
   <xsl:template match="Jobs/@*|Job/@*"> 
      <xsl:element name="{name()}"> 
         <xsl:value-of select="."/> 
      </xsl:element> 
   </xsl:template> 

   <!-- override: for selected elements, remove attributes --> 
   <xsl:template match="DateActive/@*|DateExpires/@*|DateUpdated/@*"/> 
</xsl:stylesheet> 

Текущий вывод в тексте:

492 50 83000003 61999998 Лидирующая на рынке компания с недавно созданной ролью. Высокопрофессиональная должность с ответственностью, видимостью и возможностями должна иметь твердые навыки БА, отточенные в среде SDLC Лидирующая на рынке компания с недавно созданной ролью Высокопрофильная должность с ответственной деятельностью, Видимость и возможность должны иметь твердые навыки БА, отточенные в среде SDLC Мой клиент - лидер рынка, который продолжает набирать силу 10/5/2009 4/09/2009 5/5/2009 Австралия NSW Sydney 2000 Skill Quest 90 000,00 120 000,00 за Год AUD 6

Это выход, который я хочу в xml. Пожалуйста, помогите мне найти решение.

Ответы [ 3 ]

1 голос
/ 12 октября 2009

Я подозреваю, что вы смотрите результат преобразования в браузере.

Само преобразование работает отлично, но браузер отображает простой текст XML (так как он ожидает содержимое HTML по умолчанию и игнорирует любые теги, которые не распознает, отображая только их текстовое содержимое).

Попробуйте media-type="text/xml" и посмотрите, имеет ли это значение. Если это не так, не позволяйте дисплею браузера сбить вас с толку - с XSLT все в порядке. Вы должны использовать другой процессор XSLT для подтверждения / отладки XSLT.

1 голос
/ 12 октября 2009

У вас есть такая строка вверху вашего файла XSLT ??

<xsl:output method="xml" indent="yes"/>

Это определяет формат вывода - «текст» по умолчанию, «html» и «xml» - другие опции.

Я не знаю, что вы делаете, но когда я запускаю ваш XSLT-файл из предоставленного примера XML-файла, я получаю это как вывод:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Jobs><Found>10</Found><Returned>50</Returned>
    <Job><ID>8000000</ID><PositionID>600002</PositionID>
      <Title>Development Manager</Title>
      <Summary>
         An experienced Development Manager with previous experience leading a small to mid-size team of developers in a Java/J2EE environment. A hands on role, you will be expected to manage and mentor a team of developers working on a mix of greenfield and maintenance projects.&amp;#160;&amp;#160; My client, a well known investment bank, requires an experienced Development Manager to join their core technology team. This t 

      </Summary>
      <DateActive>10/6/2009</DateActive>
      <DateExpires>11/5/2009</DateExpires>
      <DateUpdated>10/6/2009</DateUpdated>

        <Country>xxxx</Country>
        <State>xxx</State>
        <City>xxx</City>
        <PostalCode>xxx</PostalCode>

      <CompanyName>abc Technology</CompanyName>
      <BuilderFields />
      <DisplayOptions />
      <AddressType>1234</AddressType>
    </Job>
  </Jobs>
</root>

Марк

0 голосов
/ 12 октября 2009

Вы, вероятно, записываете внутренний текст узла xml вместо вызова apply-templates на одном из ваших узлов. Я не смог найти ваш прикрепленный xsl, так что не легко догадаться. Но выложи xslt, и я скажу тебе.

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