5 votos

Cómo analizar un archivo de documento XML asociado con el shapefile en PostGIS/PostgreSQL mesa

Tengo un shapefile, y la información sobre sus atributos se almacenan en un formato de Documento XML. Por ejemplo, el atributo de CONDADO se almacenan de la siguiente manera:

-<attr>  
     <attrlabl>COUNTY</attrlabl>  
     <attrdef>County abbreviation</attrdef>  
     <attrtype>Text</attrtype>  
     <attwidth>1</attwidth>  
     <atnumdec>0</atnumdec>  
    -<attrdomv>  
        -<edom>  
            <edomv>C</edomv>  
            <edomvd>Clackamas County</edomvd>  
            <edomvds/>  
         </edom>  
        -<edom>  
            <edomv>M</edomv>  
            <edomvd>Multnomah County</edomvd>  
            <edomvds/>  
         </edom>  
        -<edom>  
            <edomv>W</edomv>  
            <edomvd>Washington County</edomvd>  
            <edomvds/>  
         </edom>  
     </attrdomv>  
 </attr>

Al convertir el archivo de forma a una PostGIS/PostgreSQL tabla, también quiero crear un PostgreSQL/PostGIS tabla en la que se describen la información de los atributos. Así, la nueva tabla incluye las siguientes columnas: atributo(attrlabl), definición(attrdef), tipo(attrtype), ancho(attwidth), y las categorías(attrdomv).

Agradezco cualquier sugerencia.

1voto

sker Puntos 2670

El análisis de XML es siempre incómoda, sobre todo si existe la posibilidad de una gama de diferentes formatos de entrada (por ejemplo, las etiquetas en mayúsculas, mayúsculas o minúsculas). Por lo tanto, yo recomendaría el uso de un analizador como BeautifulSoup, para realizar el raspado de los datos en python estructuras. A partir de estas estructuras se pueden escribir los datos en el formato requerido para la base de datos.

Esta debería ser la forma más eficiente de hacer esto, ya que el desarrollo de sus propias expresiones regulares para dicha tarea es siempre mucho más trabajo de lo que usted piensa que va a ser.

0voto

prueba este (java):

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class GetXML {


    private void showNodesValues( Node rootNode ) {

        Element rootElement = (Element) rootNode;
        NodeList postgis = rootNode.getChildNodes();
        int nodeCount = postgis.getLength();
        System.out.println(" > Childs of " + rootNode.getNodeName() + ": ");        
        for ( int x = 0; x < nodeCount; x++) {
            Node pgconfig = postgis.item(x);
            int nodeType = pgconfig.getNodeType();
            if ( nodeType == 1 ) {
                Element pgElement = (Element) pgconfig;
                String nodeName = pgElement.getNodeName();
                System.out.println( nodeName + " : " + getTagValue(nodeName, rootElement) );

                int childCount = pgconfig.getChildNodes().getLength();
                if ( childCount > 1 ) showNodesValues(pgconfig);
            }
        }


    }


    private String getTagValue(String sTag, Element eElement) {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
        int count = nlList.getLength();
        if ( count > 0 ) {
            Node nValue = (Node) nlList.item(0);
            return nValue.getNodeValue();
        } else return "";
     }


    public void loadConfig( String file ) {
        try {
            File fXmlFile = new File(file);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();

            Node rootNode = doc.getElementsByTagName("attr").item(0);

            showNodesValues(rootNode);

          } catch (Exception e) {
                e.printStackTrace();
          }         
    }


}

public class Main {

    public static void main(String[] args) {

        GetXML xml = new GetXML();
        xml.loadConfig("c:/TheGrid/test.xml");
    }

}

El resultado se ve como:

 > Childs of attr: 
attrlabl : COUNTY
attrdef : County abbreviation
attrtype : Text
attwidth : 1
atnumdec : 0
attrdomv :   

 > Childs of attrdomv: 
edom :   

 > Childs of edom: 
edomv : C
edomvd : Clackamas County
edomvds : 
edom :   

 > Childs of edom: 
edomv : M
edomvd : Multnomah County
edomvds : 
edom :   

 > Childs of edom: 
edomv : W
edomvd : Washington County
edomvds : 

Si usted no puede ir adelante, dime con detalles más específicos.

[de]

0voto

Andrew Jones Puntos 1134

Puede utilizar el cargador de PostGIS Shapefile y exportador DBF para shapefiles en general, así que si tienes PgAdmin III o alguna otra base de datos de PostGIS podrá celebrar allí. No estoy seguro si se puede utilizar el cargador para sólo el archivo XML en sí, pero sabe que puede hacer por un Shapefile que requiere más o menos todos los archivos asociados con él.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X