使用 Apache Beam XmlIO 通过命名空间读取 XML
Reading XML with namespace using Apache Beam XmlIO
我正在尝试将 XML 文件读入 Apache Beam 管道。一些元素有命名空间,命名空间声明是在根节点上声明的。我能够使用标准 JAXB 解析器在 Apache Beam 之外解析 xml。但是,当我将 XmlIO.read() 函数与 beam 一起使用时,出现以下异常:
com.ctc.wstx.exc.WstxParsingException: 未声明的命名空间前缀“g”。
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<item>
<!-- Basic Product Information -->
<g:id><![CDATA[SAMI9000NAVKIT]]></g:id>
<title><![CDATA[Original Samsung Galaxy S i9000 Navigation Kit]]></title>
<link><![CDATA[https://www.mobileciti.com.au/original-samsung-galaxy-s-i9000-navigation-kit]]></link>
<description><![CDATA[<p>SAMSUNG Galaxy S (i9000) Navigation Kit - Consists of handset cradle, window shield mount and car charger.</p>]]></description>
<g:product_category><![CDATA[Electronics > Communications > Telephony > Mobile Phone Accessories]]></g:product_category>
<g:product_type><![CDATA[Accessories > Car Kits]]></g:product_type>
....
</item>
</channel>
</rss>
光束代码:
.from(<Full file path>)
.withRootElement("rss")
.withRecordElement("item").withRecordClass(Item.class));
XML 没有命名空间工作正常。非常感谢任何指针。谢谢
查看 XmlSource code,不幸的是,如果您只指定根元素,我认为它默认不支持 XML 命名空间。
不过,作为解决方法,您可以尝试执行以下操作:
.withRootElement("rss version=\"2.0\" xmlns:g=\"http://base.google.com/ns/1.0\"")
可能会奏效。
我正在尝试将 XML 文件读入 Apache Beam 管道。一些元素有命名空间,命名空间声明是在根节点上声明的。我能够使用标准 JAXB 解析器在 Apache Beam 之外解析 xml。但是,当我将 XmlIO.read() 函数与 beam 一起使用时,出现以下异常:
com.ctc.wstx.exc.WstxParsingException: 未声明的命名空间前缀“g”。
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<item>
<!-- Basic Product Information -->
<g:id><![CDATA[SAMI9000NAVKIT]]></g:id>
<title><![CDATA[Original Samsung Galaxy S i9000 Navigation Kit]]></title>
<link><![CDATA[https://www.mobileciti.com.au/original-samsung-galaxy-s-i9000-navigation-kit]]></link>
<description><![CDATA[<p>SAMSUNG Galaxy S (i9000) Navigation Kit - Consists of handset cradle, window shield mount and car charger.</p>]]></description>
<g:product_category><![CDATA[Electronics > Communications > Telephony > Mobile Phone Accessories]]></g:product_category>
<g:product_type><![CDATA[Accessories > Car Kits]]></g:product_type>
....
</item>
</channel>
</rss>
光束代码:
.from(<Full file path>)
.withRootElement("rss")
.withRecordElement("item").withRecordClass(Item.class));
XML 没有命名空间工作正常。非常感谢任何指针。谢谢
查看 XmlSource code,不幸的是,如果您只指定根元素,我认为它默认不支持 XML 命名空间。
不过,作为解决方法,您可以尝试执行以下操作:
.withRootElement("rss version=\"2.0\" xmlns:g=\"http://base.google.com/ns/1.0\"")
可能会奏效。