2015-10-05 7 views
0

Я пытаюсь выполнить поиск по XML-документу внутри Unity3D (используя uJS и MSDN класс XmlDocument) для узлов, содержащих указанную строку (в этом тесте я ищу «Журналы»), а затем уловите значение атрибута имени родительского имени соответствующего узла.Поиск XML-документа для строки

Однако я возился с этим где-то по пути; он в настоящее время передает оператор if для всех узлов (вместо тех, которые соответствуют) и, следовательно, возвращает все родительские имена в документе XML. Может ли кто-нибудь помочь мне с моей логикой, чтобы эта работа работала правильно?

Большое спасибо заранее,

Райан

Текущий код:

var mpo = xmlRoot.SelectNodes("MetaPipeObject"); 
 
      
 
    for (var i = 0; i < mpo.Count; i++) 
 
    { 
 
     var curNode = mpo[i]; 
 
     var nodeCheck = curNode.SelectNodes("//*[contains(text(), 'Logs')]"); 
 
      
 
     Debug.Log("nodeCheck: " + nodeCheck.Count); 
 
      
 
     if (nodeCheck.Count > 1) 
 
     { 
 
      Debug.Log(curNode.SelectSingleNode("@name").Value); 
 
     } 
 
    } 
 
}

XML Отрывок:

<MetaPipeObject name="Logs with graffiti"> 
 
    <FileName>TestObj_EvanLogs04.obj</FileName> 
 
    <MeshLocation>/Users/ryanachten/Documents/UnityTests/MetaPipeline_TestModels/CRM_TestObjs/TestObj_EvanLogs/TestObj_EvanLogs04/TestObj_EvanLogs04.obj</MeshLocation> 
 
    <TexLocation>/Users/ryanachten/Documents/UnityTests/MetaPipeline_TestModels/CRM_TestObjs/TestObj_EvanLogs/TestObj_EvanLogs03/TestObj_EvanLogs.jpg</TexLocation> 
 
    <ObjImgCap>/Users/ryanachten/Documents/UnityTests/MetaPipeline/Assets/fuck you_ScreenShot.png</ObjImgCap> 
 
    <ContribName>Ryan Achten</ContribName> 
 
    <ContribDate>03/10/2015</ContribDate> 
 
    <Description>Logs with graffiti found out by Evan's Bay</Description> 
 
    <ModelInfo> 
 
     <ModelCreator>Ryan Achten</ModelCreator> 
 
     <ModelCreateDate>31/05/2015</ModelCreateDate> 
 
     <ModelCreateType>Photogrammetric</ModelCreateType> 
 
    </ModelInfo> 
 
    <ContextualInfo /> 
 
    </MetaPipeObject> 
 
    <MetaPipeObject name="Punch (from Paul Jen"> 
 
    <FileName>DaotfPunch03.obj</FileName> 
 
    <MeshLocation>/Users/ryanachten/Documents/UnityTests/MetaPipeline_TestModels/CRM_TestObjs/TestObj_DaotfPunch/DaotfPunch03/DaotfPunch03.obj</MeshLocation> 
 
    <TexLocation>/Users/ryanachten/Documents/UnityTests/MetaPipeline_TestModels/CRM_TestObjs/TestObj_DaotfPunch/DaotfPunch03/Punch_McorTex_merged.JPG</TexLocation> 
 
    <ObjImgCap> 
 
    </ObjImgCap> 
 
    <ContribName>Ryan Achten</ContribName> 
 
    <ContribDate>04/10/2015</ContribDate> 
 
    <Description>3D model of Judy based on Paul Jenden's costume concept illustrations for the project Digital Achives of the Future</Description> 
 
    <ModelInfo> 
 
     <ModelCreator>ard and Ryan Achten</ModelCreator> 
 
     <ModelCreateDate>26/02/2015</ModelCreateDate> 
 
     <ModelCreateType>Design</ModelCreateType> 
 
    </ModelInfo> 
 
    <ContextualInfo /> 
 
    </MetaPipeObject>

ответ

0

XPath-выражение // поиски, начиная с корневого элемента. В вашем случае достаточно сделать .// - искать из текущего элемента.

var nodeCheck = curNode.SelectNodes(".//*[contains(text(), 'Logs')]");