У меня есть xml-файл, который описывает разговор между Агентом и Клиентом. У обеих сторон есть userId, который назначается в теге newParty.XLT перекрестная ссылка между тегами xml, чтобы решить, какое свойство класса должно быть добавлено
Последующие сообщения и уведомления, обратитесь к этому пользователю. Я хотел бы, чтобы когда сообщение или уведомление обрабатывалось, поиск выполняется с помощью userId, чтобы добавить строку «Агент» или «Клиент» к свойству класса сгенерированного HTML.
<?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>
<newParty userId="0079581AF56C0025" timeShift="20" visibility="ALL" eventId="2">
<userInfo personId="1" userNick="allendei" userType="AGENT" protocolType="BASIC" timeZoneOffset="120"/>
</newParty>
<message userId="007957F616780001" timeShift="25" visibility="ALL" eventId="3">
<msgText msgType="text" treatAs="NORMAL">This is message one.</msgText>
</message>
<message userId="0079581AF56C0025" timeShift="35" visibility="ALL" eventId="4">
<msgText msgType="text" treatAs="NORMAL">This is message two.</msgText>
</message>
<notice userId="0079581AF56C0025" timeShift="40" visibility="ALL" eventId="5">
<noticeText noticeType="USER_CUSTOM">This is notice one.</noticeText>
</notice>
<notice userId="007957F616780001" timeShift="58" visibility="ALL" eventId="6">
<noticeText noticeType="USER_CUSTOM">This is notice two.</noticeText>
</notice>
<partyLeft userId="007957F616780001" timeShift="90" visibility="ALL" eventId="4" askerId="007957F616780001">
<reason code="3">left due to disconnect</reason>
</partyLeft>
... и мой XLT является:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="/chatTranscript">
<html>
<header><xsl:value-of select="@sessionId" /></header>
<xsl:apply-templates select="newParty" />
<xsl:apply-templates select="message/msgText" />
<xsl:apply-templates select="notice/noticeText" />
<xsl:apply-templates select="partyLeft/reason" />
</html>
</xsl:template>
<xsl:template match="newParty[userInfo/@userType='CLIENT']">
<div class="Client" id="{@userId}">
<label>Client: <xsl:value-of select="userInfo/@userNick" /></label>
</div>
</xsl:template>
<xsl:template match="newParty[userInfo/@userType='AGENT']">
<div class="Client" id="{@userId}">
<label>Agent: <xsl:value-of select="userInfo/@userNick" /></label>
</div>
</xsl:template>
<xsl:template match="msgText">
<div class="Messages" id="{../@eventId}">
<label>Message: <xsl:value-of select="text()" /></label>
</div>
</xsl:template>
<xsl:template match="noticeText">
<div class="Notices" id="{../@eventId}">
<label>Notice: <xsl:value-of select="text()" /></label>
</div>
</xsl:template>
<xsl:template match="reason">
<div class="Notices" id="{../@eventId}">
<label>Reason: <xsl:value-of select="text()" /></label>
</div>
</xsl:template>
желаемый результат заключается в следующем - где свойство класса (Агент или Клиент) сообщений и уведомлений просматриваются с помощью идентификатора пользователя в новых разделах вверху.
<html>
<header>0001GaBYC53D000K</header>
<div class="Client" id="007957F616780001"><label>Client: John Doe</label></div>
<div class="Client" id="0079581AF56C0025"><label>Agent: allendei</label></div>
<div class="Messages,Client" id="3"><label>Message: This is message one.</label></div>
<div class="Messages,Agent" id="4"><label>Message: This is message two.</label></div>
<div class="Notices,Agent" id="5"><label>Notice: This is notice one.</label></div>
<div class="Notices,Client" id="6"><label>Notice: This is notice two.</label></div>
<div class="Notices,Client" id="4"><label>Reason: left due to disconnect</label></div>
Благодарим вас за ответ - он работает, как я предполагаю. Один вопрос о реализации, хотя я заметил, что порядок распечатываемых элементов был неправильным раньше, но теперь с вашим решением все в порядке. Я планировал сделать сорт на EventId, но с этим решением это не кажется необходимым. Не могли бы вы объяснить, почему? – Harriet
Я не знаю, что такое «правильный» заказ. Вышеизложенное соответствует порядку исходного документа. –
, прежде чем он дал мне все сообщения, обработанные за один раз, затем уведомления и т. Д. Не беспокойтесь об этом. Я дам ему больше исследований относительно того, как элементы предназначены для обработки в древовидной структуре. – Harriet