import arcpy, sys from xml.etree.ElementTree import ElementTree from arcpy import env env.overwriteOutput = True env.workspace = r"D:\Lakeland_GIS\GDB\Lakeland\Lakeland.gdb\AddPoints" AGSHOME = arcpy.GetInstallInfo("Desktop")["InstallDir"] translatorpath = AGSHOME + r"Metadata\Translator\ARCGIS2FGDC.xml" xmlfile = r"U:\my docs\GIS Projects\Python\Scripts\List Metadata\working_test.xml" # list any standalone feature classes fcList = arcpy.ListFeatureClasses() fcList.sort() for fc in fcList: arcpy.ExportMetadata_conversion(fc, translatorpath, xmlfile) tree = ElementTree() tree.parse(xmlfile) spot = tree.find("idinfo/descript/purpose") print fc print spot.text # list feature datasets datasetList = arcpy.ListDatasets() datasetList.sort() for dataset in datasetList: print dataset # list feature classes inside the dataset fcList = arcpy.ListFeatureClasses("","",dataset) fcList.sort() for fc in fcList: arcpy.ExportMetadata_conversion(fc, translatorpath, xmlfile) tree = ElementTree() tree.parse(xmlfile) spot = tree.find("idinfo/descript/purpose") print " " + fc print " " + spot.text
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- IdentityTransform --> <xsl:template match="/ | @* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()" /> </xsl:copy> </xsl:template> </xsl:stylesheet>
According to ESRI documentation:"In geodatabases in Oracle and Informix, the XML columns use ArcSDE XML, which stores information as BLOBs in a series of separate tables. As such, they cannot be directly accessed with SQL."http://resources.arcgis.com/en/help/main/10.2/index.html#/A_quick_tour_of_geodatabase_system_tables/006z000000tr000000/As such, the XML metadata cannot be accessed directly by a simple query to the database. (I tried to hunt for this as you have in the past.)I suggest using a Python script/Model to fully export the metadata.Use the XSLT Transformation tool and with an identity XSLT to extract all the metadata.You can save the code below as a XLST document to feed into the tool.See: http://www.usingxml.com/Transforms/XslIdentity<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- IdentityTransform --> <xsl:template match="/ | @* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()" /> </xsl:copy> </xsl:template> </xsl:stylesheet>
I want to pass a SQL command, something like Select DOCUMENTATION from gdb_items_vw, to retrieve all the information about the metadata of the layer. But the difficulty is that this DOCUMENTATION field is CLOB type. I found this command that seems correct: SQL> select EXTRACT (XMLType (DOCUMENTATION), '/ metadata') as DOCUMENTATION from sde.gdb_items_vw where name = 'user_name.table_name'; ... but as my sde.gdb_items_vw table is empty, the query gives me 0 selected lines! So why this table is empty? Is that the right table to get metadata?
And some examples are available here in the doc as well. For example:Example: Finding domain owners using SQL
String strLayer = layerName; String connectionURL = null; String connectionID = null; String connectionPW = null; String driverString = null; connectionURL = "jdbc:oracle:thin:@server.domain:port:instance"; connectionID = "username"; connectionPW = "password"; driverString = "oracle.jdbc.driver.OracleDriver"; Class.forName(driverString); sqlconn = java.sql.DriverManager.getConnection(connectionURL, connectionID, connectionPW); stmt = sqlconn.createStatement(); rset = stmt.executeQuery("SELECT uuid, documentation FROM sde.gdb_items_vw where upper(name) = '" + strLayer + "'"); rset.next(); java.io.InputStream xmlStream = rset.getBinaryStream("documentation"); if (xmlStream != null) { URL url1 = new URL(<URL to ArcGIS2FGDC.xsl>); InputStreamReader isr1 = new InputStreamReader(url1.openStream()); StreamSource xslSource1 = new StreamSource(isr1); TransformerFactory tFactory1 = TransformerFactory.newInstance(); Transformer transformer1 = tFactory1.newTransformer(xslSource1); Source schemaSource = new StreamSource(xmlStream); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); transformer1.transform(schemaSource, result); StringReader reader2 = new StringReader(writer.toString()); writer2 = new StringWriter(); URL url = new URL(<URL to your own xsl>); InputStreamReader isr2 = new InputStreamReader(url.openStream()); StreamSource xslSource = new StreamSource(isr2); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer2 = tFactory.newTransformer(xslSource); transformer2.transform(new javax.xml.transform.stream.StreamSource(reader2), new javax.xml.transform.stream.StreamResult(writer2)); } xmlStream.close(); rset.close(); sqlconn.close(); return(writer2.toString());
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.