2016-03-30 27 views
2

だから私は私のシステムでは、従業員のXML文書を持っている:だけのショーをXPathでのconcat()による改行( n)

//employee[supervisor/@sid='1']/concat('Name: ', concat(firstname/text(), ' ', lastname/text(), '\nGender: ', gender/text(), '\nD.O.B: ', dob/text())) 

しかし:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<couriersystem title="System" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="schema.xsd"> 
    <!-- snip --> 
    <employees> 
     <employee eid="1"> 
      <nin>AZ123518D</nin> 
      <firstname>Peter</firstname> 
      <lastname>Smith</lastname> 
      <gender>Male</gender> 
      <dob>1994-02-11</dob> 
      <email>[email protected]</email> 
      <address> 
       119, London Street, Nidrie, F57 8NE 
      </address> 
      <tel>07005748900</tel> 
      <salary>30526</salary> 
      <empbranch bid="1" /> 
      <supervisor sid="1" /> 
     </employee> 
     <employee eid="2"> 
      <nin>CN174869F</nin> 
      <firstname>Jennifer</firstname> 
      <lastname>Black</lastname> 
      <gender>Male</gender> 
      <dob>1984-12-24</dob> 
      <email>[email protected]</email> 
      <address> 
       161, South Road, Nidrie, W79 8WG 
      </address> 
      <tel>07555111222</tel> 
      <salary>40576</salary> 
      <empbranch bid="2" /> 
      <supervisor sid="1" /> 
     </employee> 
     <employee eid="3"> 
      <nin>ET127654M</nin> 
      <firstname>Aaron</firstname> 
      <lastname>Jones</lastname> 
      <gender>Male</gender> 
      <dob>1968-03-15</dob> 
      <email>[email protected]</email> 
      <address> 
       66, High Road, Yoker, Q47 4SR 
      </address> 
      <tel>07856471267</tel> 
      <salary>30526</salary> 
      <empbranch bid="3" /> 
      <supervisor sid="1" /> 
     </employee> 
     <employee eid="4"> 
      <nin>GC765238A</nin> 
      <firstname>Alistair</firstname> 
      <lastname>Smith</lastname> 
      <gender>Male</gender> 
      <dob>1976-11-26</dob> 
      <email>[email protected]</email> 
      <address> 
       109, West Plaza, Clydebank, G55 8RC 
      </address> 
      <tel>0700</tel> 
      <salary>25400</salary> 
      <empbranch bid="4" /> 
      <supervisor sid="1" /> 
     </employee> 
     <employee eid="5"> 
      <nin>HP146854D</nin> 
      <firstname>Emma</firstname> 
      <lastname>Reynolds</lastname> 
      <gender>Male</gender> 
      <dob>1995-05-05</dob> 
      <email>[email protected]</email> 
      <address> 
       57, Scott Street, Aberdeen, O75 2KS 
      </address> 
      <tel>07625361536</tel> 
      <salary>25400</salary> 
      <empbranch bid="5" /> 
      <supervisor sid="7" /> 
     </employee> 
     <!-- snip --> 
    </employees> 
    <!-- snip --> 
</couriersystem> 

そして、私は彼らの上司によって従業員の詳細の全てを取得するには、次のXPathを持っています残りの1人の従業員、\nの文字も表示されます。

この問題を解決するにはどうすればよいですか? @madcrazydrumma]

答えて

3

取得するには\nはXPathのでconcat()で解釈されるように、codepoints-to-string(10) [クレジットを使用する次のように結果を返します

//employee[supervisor/@sid='1']/concat('Name: ', firstname, ' ', lastname, 
             codepoints-to-string(10), 
             'Gender: ', gender, 
             codepoints-to-string(10), 
             'D.O.B: ', dob) 

Name: Peter Smith 
Gender: Male 
D.O.B: 1994-02-11 
Name: Jennifer Black 
Gender: Male 
D.O.B: 1984-12-24 
Name: Aaron Jones 
Gender: Male 
D.O.B: 1968-03-15 
Name: Alistair Smith 
Gender: Male 
D.O.B: 1976-11-26 

マイナー注記:あなたの基本的なXPath 2.0の表現はうまくいきました。コメントで発見したように、サイトの制限、xpathtester.com/xpathのために結果は正しくありませんでした。オンラインのXPath 2.0テストの代わりにvidelibri.sourceforge.net/cgi-bin/xidelcgiを使用してください。

+0

それは奇妙なことですが、その1つだけの結果を返します! – madcrazydrumma

+0

どのようなXPath 2.0ライブラリを使用していますか? – kjhughes

+0

これを使ってテストしてみましょう:http://www.xpathtester.com/xpath – madcrazydrumma

2

まあ、私はXSLTを使用してXPath式をテストし、あなたが望むよう出力は4つのエントリが含まれています

マイXSLTだった:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/couriersystem"> 
    <xsl:copy-of select="//employee[supervisor/@sid='1']/concat('Name: ', concat(firstname/text(), ' ', lastname/text(), '\nGender: ', gender/text(), '\nD.O.B: ', dob/text()))" /> 
    </xsl:template> 
</xsl:stylesheet> 

結果は、すべてのテキストの1行です。

<?xml version="1.0" encoding="UTF-8"?>Name: Peter Smith\nGender: Male\nD.O.B: 1994-02-11 Name: Jennifer Black\nGender: Male\nD.O.B: 1984-12-24 Name: Aaron Jones\nGender: Male\nD.O.B: 1968-03-15 Name: Alistair Smith\nGender: Male\nD.O.B: 1976-11-26 

出力を上記よりも少しフォーマットしたければ、適切な場所での文字:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/couriersystem"> 
    <xsl:value-of select="'&#10;'" /> 
    <xsl:for-each select="//employee[supervisor/@sid='1']"> 
     <xsl:value-of select="concat('Name: ', firstname/text(), ' ', lastname/text(), '&#10;','Gender: ', gender/text(), '&#10;','D.O.B: ', dob/text(),'&#10;')" /> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

これの結果は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?> 
Name: Peter Smith 
Gender: Male 
D.O.B: 1994-02-11 
Name: Jennifer Black 
Gender: Male 
D.O.B: 1984-12-24 
Name: Aaron Jones 
Gender: Male 
D.O.B: 1968-03-15 
Name: Alistair Smith 
Gender: Male 
D.O.B: 1976-11-26 

P.S: 'ジェニファー・ブラック' 性転換ですか?彼女は女性の名前と男性の性別を持っているので;-)

+0

母は私の友人のデータを入力しています。 ;)そして私はこれにXSLを使用していないので、残念ながら問題は解決しません – madcrazydrumma

+1

まあ、私の最後の発言はほんの少しの冗談でした* g *。しかし、私のXPath式は基本的に受け入れられた答えと同じです。単に ' 'を 'codepoints-to-string(10)'に置き換え、式とあなたのdoneをマージします。 – zx485

関連する問題