2017-05-31 57 views
0

我有下面的XML文件:有序的XPath值

<Body> 
    <ELEMENT Property1="A" Property2="B" Property3="C"/> 
    <ELEMENT Property1="D" Property2="E" Property3="F"/> 
    <ELEMENT Property1="G" Property2="H" Property3="I"/> 
</Body> 

而且我想有一個字符串對象的所有命令是這樣的屬性值:

A,B,C; D,E,F; G,H,I

我基本上需要有每個ELEMENT屬性用分號隔開。

如何做到這一點?

+1

顯示你嘗試過什麼 – Andersson

+0

@Andersson坦率地說,我想不出任何可能表達的... – Radhwen

回答

1

由於我想要的特性和元件之間;之間,問題,以下是未定義數量的元件所需的溶液:

string-join(for $x in //ELEMENT return string-join($x/@*,','), ';')

結果是

A,B,C; d ,E,F,G,H,I

1

你可以試試下面的表達

string-join((string-join(//ELEMENT/@Property1, ','), string-join(//ELEMENT/@Property2, ','), string-join(//ELEMENT/@Property3, ',')), ';') 

輸出:

A,D,G;B,E,H;C,F,I 

string-join((string-join(//ELEMENT[1]/@*, ','), string-join(//ELEMENT[2]/@*, ','), string-join(//ELEMENT[3]/@*, ',')), ';') 

輸出:

A,B,C;D,E,F;G,H,I 
+0

我實際工作中你犯了一個錯誤,爲此感到遺憾。期望的結果是'A,B,C; D,E,F; G,H,I'。 一次一個元素。 – Radhwen

+0

優秀!謝謝:) 請再說一點,如果ELEMENT的數量出乎意料呢?有沒有辦法迭代? – Radhwen

+1

注意,XML中的屬性沒有內在排序,因此「@ *」提供的屬性順序是不可預知的。除非您使用實際的屬性名稱,否則無法確保輸出包含「A,B,C」而不是「C,A,B」。 –