私はXSLTで新しく、私の現在の例からすべての情報を抜き出すのに問題があります。異なるxml xpathの情報にアクセスし、複数の同じパスを表示
以下の例では、メッセージを表示してテキストのプロパティに気づくことにも興味があり、見て分かるように、ノードも繰り返されています。この情報を手に入れてください。
<?xml version="1.0"?><chatTranscript startAt="2016-10-06T09:16:40Z" sessionId="0001GaBYC53D000K">
<newParty userId="007957F616780001" timeShift="1" visibility="ALL" eventId="1">
<userInfo personId="" userNick="John Doe" userType="CLIENT" protocolType="FLEX" timeZoneOffset="120"/>
<userData>
<item key="GMSServiceId">5954d184-f89d-4f44-8c0f-a772d458b353</item>
<item key="IdentifyCreateContact">3</item>
<item key="MediaType">chat</item><item key="TimeZone">120</item>
<item key="_data_id">139-e9826bf5-c5a4-40e5-a729-2cbdb4776a43</item>
<item key="firstName">John</item><item key="first_name">John</item>
<item key="lastName">Doe</item>
<item key="last_name">Doe</item>
<item key="location_lat">37.8197</item>
<item key="location_long">-122.4786</item>
<item key="userDisplayName">John Doe</item>
</userData>
</newParty>
<message userId="007957F616780001" timeShift="5" visibility="ALL" eventId="2">
<msgText msgType="text" treatAs="NORMAL">This is message one.</msgText>
</message>
<message userId="007957F616780001" timeShift="5" visibility="ALL" eventId="2">
<msgText msgType="text" treatAs="NORMAL">This is message two.</msgText>
</message>
<notice userId="007957F616780001" timeShift="246" visibility="ALL" eventId="3">
<noticeText noticeType="USER_CUSTOM">This is notice one.</noticeText>
</notice>
<notice userId="007957F616780001" timeShift="246" visibility="ALL" eventId="3">
<noticeText noticeType="USER_CUSTOM">This is notice two.</noticeText>
</notice>
<partyLeft userId="007957F616780001" timeShift="291" visibility="ALL" eventId="4" askerId="007957F616780001">
<reason code="3">left due to disconnect</reason>
</partyLeft>
</chatTranscript>
とXSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/chatTranscript/newParty[count(*) > 1]">
<xsl:variable name="curParty" select="@userId" />
GMSServiceId - <xsl:value-of select="userData/item[@key='GMSServiceId']"/>
IdentifyCreateContact: <xsl:value-of select="userData/item[@key='IdentifyCreateContact']"/>
MediaType: <xsl:value-of select="userData/item[@key='MediaType']"/>
firstName: <xsl:value-of select="userData/item[@key='firstName']"/>
userDisplayName: <xsl:value-of select="userData/item[@key='userDisplayName']"/>
</xsl:template>
<xsl:template match="/chatTranscript/message[count(*) > 1]">
<xsl:variable name="curParty" select="@userId" />
Message Text: <xsl:value-of select="msgText"/>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
電流出力は次のようになります。もちろん
GMSServiceId - 5954d184-f89d-4f44-8c0f-a772d458b353 IdentifyCreateContact: 3 MediaType: chat firstName: John userDisplayName: John Doe
私はこのリストにメッセージテキストと通知テキストを追加したいと思います。
私は現時点で何を投げているのかというと、2つのケースのxmlの構造が異なっているという事実です。(メッセージと通知に使用される)2番目のケースの処理方法はわかりません。
与えられた例で得られると思われる正確な出力を表示してください。 –
そして入力XMLを修正できますか?ルート要素がないので、[well-formed](https://www.w3.org/TR/REC-xml/#dt-wellformed)ではありません。 –