2015-03-31 2 views
1

Имейте проблему переноса php-скрипта на golang.Соберите все xml-структуры с заданным именем в golang

Есть ли способ в golang похож на РНР:

$processRefList = $faceContainer->getElementsByTagName('processRef');

Существует файл XML с огромным количеством вложенных элементов с именами processRef.

Поэтому мне нужно собрать все эти элементы, не имея дело с деревом вложенных структур.

Вот пример часть XML:

<face> 
<processes> 
    <process group="1" type="regular"/> 
    <process group="2" type="spotUV" state="off"/> 
</processes> 
<assets>...</assets> 
<groups> 
    <group id="1"> 
     <assetRefs> 
      <imageRef ref="1" x="0" y="0" id="8"> 
       <processRefs> 
        <!-- This applies spotUV to this asset and removes the regular process. --> 
        <processRef ref="1" state="off"/> 
        <processRef ref="2" state="on"/> 
       </processRefs> 
      </imageRef> 
      <textRef ref="1" x="161" y="41" id="7"/> 
      <textRef ref="2" x="160" y="55" id="6"> 
       <processRefs> 
        <!-- This applies spotUV to this asset and also leaves regular process applied. --> 
        <processRef ref="2" state="on"/> 
       </processRefs> 
      </textRef> 
     </assetRefs> 
    </group> 
    <group id="2">...</group> 
</groups> 

+0

Это может помочь. http://blog.labix.org/2013/06/07/efficient-xpath-for-go –

ответ

-3

Попробуйте

$extractvar = new DOMDocument(); 
$extractvar ->load("yourfile"); 

$itemextract= $extractvar ->getElementsByTagName("faceContainerRefs"); 

foreach($itemextract as $value) 
{ 
$var1= $value->getElementsByTagName("faceContainerRef "); 
$var= $var1->item(0)->nodeValue; 
} 
+0

Возможно, вы меня неправильно не понимаете. Я пытаюсь найти golang реализацию функции php. Но в любом случае спасибо за ответ! –

-1
////store all xml data in var response 
type XMLQuery struct { 
Loc string `xml:",chardata"` 
} 
var l XMLQuery 
decoder := xml.NewDecoder(strings.NewReader(string(response))) //store 
all xml data in var response 
for { 

token, _ := decoder.Token() 

if token == nil { 
    break 
} 

switch Element := token.(type) { 
case xml.StartElement: 
    if Element.Name.Local == "processRef" { 
    fmt.Println("Element name is : ", Element.Name.Local) 

    err := decoder.DecodeElement(&l, &Element) 
    if err != nil { 
     fmt.Println(err) 
    } 

    attrVal :=l.Loc 
    fmt.Println("Title: ", attrVal) 

}}} 
+0

Возможно, вы захотите добавить контекст к своему ответу! – Daniel

Смежные вопросы