2017-01-31 2 views
0

Я пытаюсь разобрать XML-файл и распечатать атрибуты, но он не работает.Groovy: проблема распечатывания атрибутов из xml

Вот Groovy код:

def Server1 = new XmlParser().parse('c:\\temp\\webSimplified.xml') 
Server1.each { 
    println "Stuff in session-config: ${it}" 
    it.attributes().each { 
     println 'PLEASE PRINT OUT ATTRIBUTES: ' 
     println it.toString() 
    } 
} 

Вот это webSimplified.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 
    <servlet> 
     <servlet-name>jsp</servlet-name> 
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
     <init-param> 
      <param-name>fork</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <init-param> 
      <param-name>xpoweredBy</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <load-on-startup>3</load-on-startup> 
    </servlet> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 

А вот результаты от запуска моего Groovy скрипт: Ничто не выводит из «него .attributes(). каждый {'сегмент. Как я могу заставить это работать?

Stuff in session-config: {http://xmlns.jcp.org/xml/ns/javaee}servlet[attributes={}; value=[{http://xmlns.jcp.org/xml/ns/javaee}servlet-name[attributes={}; value=[jsp]], {http://xmlns.jcp.org/xml/ns/javaee}servlet-class[attributes={}; value=[org.apache.jasper.servlet.JspServlet]], {http://xmlns.jcp.org/xml/ns/javaee}init-param[attributes={}; value=[{http://xmlns.jcp.org/xml/ns/javaee}param-name[attributes={}; value=[fork]], {http://xmlns.jcp.org/xml/ns/javaee}param-value[attributes={}; value=[false]]]], {http://xmlns.jcp.org/xml/ns/javaee}init-param[attributes={}; value=[{http://xmlns.jcp.org/xml/ns/javaee}param-name[attributes={}; value=[xpoweredBy]], {http://xmlns.jcp.org/xml/ns/javaee}param-value[attributes={}; value=[false]]]], {http://xmlns.jcp.org/xml/ns/javaee}load-on-startup[attributes={}; value=[3]]]] 
Stuff in session-config: {http://xmlns.jcp.org/xml/ns/javaee}session-config[attributes={}; value=[{http://xmlns.jcp.org/xml/ns/javaee}session-timeout[attributes={}; value=[30]]]] 

Process finished with exit code 0 
+0

Какие атрибуты вы пытаетесь напечатать? Те, которые находятся в '', или сканируют xml и распечатывают все атрибуты для всех узлов? – dmahapatro

+0

В элементе «session-config» нет атрибута, если вы хотите его вывести. Вы пытаетесь получить «session-timeout»? –

ответ

0

Конечно ничего не печатается. Я научил вас в другом ответе, как распечатывать атрибуты, но у вас нет атрибутов, но теги для детей.

Попробуйте это:

def Server1 = new XmlParser().parse(/c:\temp\webSimplified.xml/) 
Server1.each { 
    println "Stuff in ${it.name().localPart}: $it" 
    println() 
    it.children().each { 
     println 'PLEASE PRINT OUT child element: ' 
     println it 
     println() 
    } 
    3.times { println() } 
} 
0

Это работает:

def Server1 = new XmlParser().parseText(''' 

<web-app 
    version="3.1"> 
    <servlet> 
     <servlet-name>jsp</servlet-name> 
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
     <init-param> 
      <param-name>fork</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <init-param> 
      <param-name>xpoweredBy</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <load-on-startup>3</load-on-startup> 
    </servlet> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 

''') 

Выход:

servlet-name : jsp 
servlet-class : org.apache.jasper.servlet.JspServlet 
init-param : 
init-param : 
load-on-startup : 3 
session-timeout : 30 
0

Предполагая, что вы хотите напечатать значения sesssion конфигурации (квалифицированное догадку, основанную на ваш вопрос), следующий будет работать:

def str = ''' 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 
    <servlet> 
     <servlet-name>jsp</servlet-name> 
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
     <init-param> 
      <param-name>fork</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <init-param> 
      <param-name>xpoweredBy</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <load-on-startup>3</load-on-startup> 
    </servlet> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 
''' 

def xml = new XmlParser().parseText(str) 
xml.'session-config'.'*'.each { node -> 
    println "${node.name().localPart} -> ${node.text()}" 
} 

отмечают, что узел является экземпляр groovy.util.Node и node.name() возвращает экземпляр QName, который является объектом, поддерживающим пространство имен. Чтобы получить «локальное имя», мы вызываем «localPart» в QName.

Выражение GPATH xml.'session-config'.'*'.each означает:

от корневого узла (т.е. переменная XML здесь), выбрать все дочерние узлы с именем «сеанса конфигурации», а затем перебрать все дочерние узлы под этим узлом.

Вышеприведенные напечатает:

session-timeout -> 30 
Смежные вопросы