我正在使用C#语言在Infopath上工作,我尝试了很多时间来获得期望节点的值使用XPathNavigator。但结果并没有像我预期的那样。我有下面的xml脚本:
<my:QuestionText>Container ID</my:QuestionText>
<my:QuestionAnswerTextbox>56456</my:QuestionAnswerTextbox>
我想从两个节点获得两个值:
function GetMobileOperatingSystem() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
return 'iOS';
}
else if (userAgent.match(/Android/i)) {
return 'Android';
}
else if(userAgent.match(/Windows Phone/i))
{
return 'Windows Phone';
}
else if (userAgent.match(/Windows NT/i) && userAgent.match(/Tablet PC/i)) {
return 'Windows Tablet';
}
else if (userAgent.match(/Windows NT/i)) {
return 'Windows Desktop';
}
else {
return 'unknown';
}
}
function OpenNavigation(lat, lon) {
// If Android device, open coordinates for google navigation
if (GetMobileOperatingSystem() === 'Android') {
// window.open("google.navigation:q=35.208707,-80.830739", '_system');
window.open("google.navigation:q=lat,lon", '_system');
}
else if(GetMobileOperatingSystem().match(/Windows/i))
{
// window.open("http://maps.google.com/maps?daddr=" + lat + "," + lon);
window.open("ms-drive-to:?destination.latitude=" + lat + "&destination.longitude=" + lon);
}
}
您能否告诉我如何做到这一点,如果可以,请指导我或给我另一种方法或解决方案吗?
非常感谢。
答案 0 :(得分:0)
该XML中有重复节点,因此您需要使用XPathNodeIterator和循环来遍历这些节点。试试这个:
XPathNodeIterator auditInformationQuestionsNode = MainDataSource.CreateNavigator().Select("my:AuditQuestions/my:AuditInformationQuestions", NamespaceManager);
foreach (XPathNavigator node in auditInformationQuestions)
{
string questionTextValue = node.SelectSingleNode("my:QuestionText", NamespaceManager).Value;
string questionAnswerTextboxValue = node.SelectSingleNode("my:QuestionAnswerTextbox", NamespaceManager).Value;
}
您将在这些变量中获得所需内容:questionTextValue和questionAnswerTextbox。
希望这会有所帮助。
注意:我假设您只提供部分XML,因此您的:AuditInformationQuestions节点的路径可能不同。你需要在那里使用完整路径才能获得它。