下面是我需要解析的示例XML文件。这只是文件原始文件的一部分非常大。但格式总是一样的。
我想只解析这些值并将其放在数据框中。
<Property Name="Entity1ID" Type="Edm.String">
<Annotation Term="test.Label">
<String>IDENTIFIER</String>
</Annotation>
</Property>
所以在数据帧中我应该拥有像这样的所有值
Entity1ID -> IDENTIFIER
ID -> FILEID
Entity2ID -> ID
依旧......
大约有10个EntityType和1000个属性标记,我只需要解析属性标记并映射值。
我无法解析这些值。我知道这将是一个小程序,但我是R的新手。
先谢谢。
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:Data>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="test.Models" Alias="test">
<EntityType Name="Entity1">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="Entity1ID" Type="Edm.String">
<Annotation Term="test.Label">
<String>IDENTIFIER</String>
</Annotation>
</Property>
<Property Name="ID" Type="Edm.String">
<Annotation Term="test.Label">
<String>FILEID</String>
</Annotation>
</Property>
<NavigationProperty Name="Subjects" Type="Collection(test.Subjects)"/>
</EntityType>
<EntityType Name="Entity2">
<Key>
<PropertyRef Name="Entity2ID"/>
</Key>
<Property Name="Entity2ID" Type="Edm.String">
<Annotation Term="test.Label">
<String>ID</String>
</Annotation>
</Property>
</EntityType>
<Function Name="GetData" EntitySetPath="asphalt/Entity2" IsBound="true">
<Parameter Name="asphalt" Type="test.asphalt" Nullable="false"/>
<Parameter Name="ID" Type="Edm.String"/>
<ReturnType Type="Collection(test.Entity2)" Nullable="false"/>
</Function>
<Term Name="Label" Type="Edm.String"/>
<EntityContainer Name="API">
<EntitySet Name="Studies" EntityType="test.Entity1"/>
</EntityContainer>
</Schema>
</edmx:Data>
</edmx:Edmx>
答案 0 :(得分:1)
希望这有帮助!
library(xml2)
library(dplyr)
#test.xml is the file having XML data
xml_doc <- read_xml("test.xml")
Value <- xml_doc %>%
xml_find_all("//edmx:Data/d1:Schema/d1:EntityType/d1:Property/d1:Annotation/d1:String", ns=xml_ns(xml_doc)) %>%
xml_text()
Key <- xml_doc %>%
xml_find_all("//edmx:Data/d1:Schema/d1:EntityType/d1:Property", ns=xml_ns(xml_doc)) %>%
xml_attr("Name")
df <- data.frame(Key, Value)
df
输出
Key Value
1 Entity1ID IDENTIFIER
2 ID FILEID
3 Entity2ID ID