【发布时间】:2019-06-03 16:21:00
【问题描述】:
我正在尝试将来自 SurveyMonkey 的一些数据解析为内部应用程序可用的 XML 格式。 SurveyMonkey 的结果非常笨拙。问题按他们研究的“页面”排序。用于为给定问题提供答案的值嵌套在某个子 ID 类型中。下面是一个简单的例子:
<root>
...
<pages>
<questions>
<answers>
<text>John</text>
<row_id>123456789</row_id>
</answers>
<answers>
<text>Smith</text>
<row_id>123456790</row_id>
</answers>
<answers>
<text>jsmith@example.com</text>
<row_id>123456791</row_id>
</answers>
<id>987654321</id>
</questions>
<questions>
<answers>
<choice_id>144018495</choice_id>
</answers>
<id>987654322</id>
</questions>
<questions>
<answers>
<choice_id>489456456</choice_id>
</answers>
<answers>
<choice_id>159489464</choice_id>
</answers>
<id>987654323</id>
</questions>
<id>48946496849</id>
</pages>
<pages>
<questions>
<answers>
<choice_id>144018495</choice_id>
</answers>
<id>987654324</id>
</questions>
<questions>
<answers>
<choice_id>489456456</choice_id>
</answers>
<answers>
<choice_id>159489464</choice_id>
</answers>
<id>987654325</id>
</questions>
<id>1541561518</id>
</pages>
....
<id>8594816548</id>
</root>
而我试图将其转换为具有大量结构和顺序依赖项的内容。使用 {...} 表示来自上面的值
<DataExchange>
<Source>XMLIMPORT</Source>
<EffectData>
<DataSet>
<Source>XMLIMPORT</Source>
<IDContainer>
<FlexiID>
<key>ID_KEY</key>
<value>{/root/id}</value>
</FlexibleID>
</IDContainer>
<MasterData>
<FirstName>{/root/pages/questions/text where row_id = 123456789}</FirstName>
<LastName>{/root/pages/questions/text where row_id = 123456790}</LastName>
<ContactDetails>
<Email>{/root/pages/questions/text where row_id = 123456791}</Email>
<Phone1>{...}</Phone1>
<Phone2>{...}</Phone2>
</ContactDetails>
</MasterData>
<Organization>hardcoded</Organization>
{if Choice_ID = x in Question y then...}
<Flags>
<FromDate>
<key>ID_KEY</key>
<value>{/root/id}</value>
</FlexibleID>
</IDContainer>
...
</DataSet>
</EffectData>
</DataExchange>
你明白了要点。嵌套在页面中的问题嵌套在所有乱序中,这很丑陋。我现在只是不从 4th Survey Monky 页面元素中抓取并回答并将其一直放在前面。 XML 的 XSD 对元素的顺序非常严格,所以我必须在这里进行很多调整。我可以复制所有的孩子然后处理吗?有什么帮助/想法/祈祷吗?
-CJW
【问题讨论】:
-
您想要的输出 XML 现在是格式正确的。
<IDContainer>和<FlexibleID>需要修复。