请求提供基于输入Payload生成响应的XSLT实现方案
使用XSLT处理传入的Payload生成响应
先把你提供的传入Payload片段整理出来:
<Request> <PrRequest> <RequestWork> <QAList> <AnswerID>String</AnswerID> <QuestionId>066Q</QuestionId> <QuestionText>Reason for Visiting </QuestionText> <VersionNumber>V1</VersionNumber> <Answers> <AnswerText>Rogane X</AnswerText> <AnswerText>Rogane Y</AnswerText> </Answers> </QAList> <QAList> <!-- 未完整提供的内容 --> </QAList> </RequestWork> </PrRequest> </Request>
针对这个结构,我写了一段XSLT代码,能帮你提取每个问答组的信息并生成结构化的响应输出:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配根节点,启动转换流程 --> <xsl:template match="/"> <Response> <xsl:apply-templates select="Request/PrRequest/RequestWork/QAList"/> </Response> </xsl:template> <!-- 处理单个QAList节点,生成问答条目 --> <xsl:template match="QAList"> <QAEntry> <QuestionContent> <xsl:value-of select="QuestionText"/> </QuestionContent> <QuestionIdentifier> <xsl:value-of select="QuestionId"/> </QuestionIdentifier> <AvailableAnswers> <!-- 遍历所有答案选项并输出 --> <xsl:for-each select="Answers/AnswerText"> <AnswerOption> <xsl:value-of select="."/> </AnswerOption> </xsl:for-each> </AvailableAnswers> </QAEntry> </xsl:template> </xsl:stylesheet>
代码说明:
- 根模板匹配文档根节点,先创建
<Response>作为输出的根容器,然后自动遍历所有QAList节点进行处理 - 每个
QAList模板会生成一个<QAEntry>条目,把问题文本、问题ID和所有答案选项都整理成清晰的结构 - 用
<xsl:for-each>循环处理Answers下的每个AnswerText,确保所有答案都能被提取出来
如果未完整提供的第二个QAList结构和第一个一致,这段代码会自动处理它。转换后的输出大概是这样的:
<Response> <QAEntry> <QuestionContent>Reason for Visiting </QuestionContent> <QuestionIdentifier>066Q</QuestionIdentifier> <AvailableAnswers> <AnswerOption>Rogane X</AnswerOption> <AnswerOption>Rogane Y</AnswerOption> </AvailableAnswers> </QAEntry> <!-- 第二个QAList对应的QAEntry会自动生成在这里 --> </Response>
要是你需要调整输出的节点名称、添加更多字段(比如VersionNumber),直接修改XSLT里的模板内容就行,灵活性很高。
内容的提问来源于stack exchange,提问作者user3347963
相关产品推荐
相关产品推荐

