xml2:如何将 xml 对象转换为字符串(在内存中,作为 R 对象)
xml2: How to convert an xml object to string (in memory, as R object)
我有以下情况:
- 我使用
xml2::read_xml
解析 xml 文件
- 我更改了xml文档中的一些内容。详细信息与问题无关。
- 现在我想将处理过的 xml 数据发送到 API。因此,我需要 xml 数据的文本表示。为此,XML 包具有函数
XML::toString
。我在 xml2-Package 中找不到等效项。因此我这样做:
tmpfile <- tempfile(fileext = ".xml")
xml2::write_xml(xml, file = tmpfile)
txt <- readLines(tmpfile, encoding = "UTF-8")
file.remove(tmpfile)
call_api(txt)
- 我正在为多个 hundret 文件执行此操作。
将可以在内存中完成的事情写入磁盘是非常低效的。
我是否遗漏了 xml2 包中的明显功能?
xml2
包为其对象 类 提供了 as.character()
方法。因此,使用 built-in 示例,您可以简单地执行以下操作:
library(xml2)
dat <- read_xml(xml2_example("order-doc.xml"))
as.character(dat)
[1] "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<purchaseOrder xmlns=\"http://tempuri.org/po.xsd\" orderDate=\"1999-10-20\">\n <shipTo country=\"US\">\n <name>Alice Smith</name>\n <street>123 Maple Street</street>\n <city>Mill Valley</city>\n <state>CA</state>\n <zip>90952</zip>\n </shipTo>\n <billTo country=\"US\">\n <name>Robert Smith</name>\n <street>8 Oak Avenue</street>\n <city>Old Town</city>\n <state>PA</state>\n <zip>95819</zip>\n </billTo>\n <comment>Hurry, my lawn is going wild!</comment>\n <items>\n <item partNum=\"872-AA\">\n <productName>Lawnmower</productName>\n <quantity>1</quantity>\n <USPrice>148.95</USPrice>\n <comment>Confirm this is electric</comment>\n </item>\n <item partNum=\"926-AA\">\n <productName>Baby Monitor</productName>\n <quantity>1</quantity>\n <USPrice>39.98</USPrice>\n <shipDate>1999-05-21</shipDate>\n </item>\n </items>\n</purchaseOrder>\n"
另请注意,因为默认的 toString()
方法首先强制转换为字符,您也可以使用它。
identical(toString(dat), as.character(dat))
[1] TRUE
我有以下情况:
- 我使用
xml2::read_xml
解析 xml 文件
- 我更改了xml文档中的一些内容。详细信息与问题无关。
- 现在我想将处理过的 xml 数据发送到 API。因此,我需要 xml 数据的文本表示。为此,XML 包具有函数
XML::toString
。我在 xml2-Package 中找不到等效项。因此我这样做:tmpfile <- tempfile(fileext = ".xml") xml2::write_xml(xml, file = tmpfile) txt <- readLines(tmpfile, encoding = "UTF-8") file.remove(tmpfile) call_api(txt)
- 我正在为多个 hundret 文件执行此操作。
将可以在内存中完成的事情写入磁盘是非常低效的。
我是否遗漏了 xml2 包中的明显功能?
xml2
包为其对象 类 提供了 as.character()
方法。因此,使用 built-in 示例,您可以简单地执行以下操作:
library(xml2)
dat <- read_xml(xml2_example("order-doc.xml"))
as.character(dat)
[1] "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<purchaseOrder xmlns=\"http://tempuri.org/po.xsd\" orderDate=\"1999-10-20\">\n <shipTo country=\"US\">\n <name>Alice Smith</name>\n <street>123 Maple Street</street>\n <city>Mill Valley</city>\n <state>CA</state>\n <zip>90952</zip>\n </shipTo>\n <billTo country=\"US\">\n <name>Robert Smith</name>\n <street>8 Oak Avenue</street>\n <city>Old Town</city>\n <state>PA</state>\n <zip>95819</zip>\n </billTo>\n <comment>Hurry, my lawn is going wild!</comment>\n <items>\n <item partNum=\"872-AA\">\n <productName>Lawnmower</productName>\n <quantity>1</quantity>\n <USPrice>148.95</USPrice>\n <comment>Confirm this is electric</comment>\n </item>\n <item partNum=\"926-AA\">\n <productName>Baby Monitor</productName>\n <quantity>1</quantity>\n <USPrice>39.98</USPrice>\n <shipDate>1999-05-21</shipDate>\n </item>\n </items>\n</purchaseOrder>\n"
另请注意,因为默认的 toString()
方法首先强制转换为字符,您也可以使用它。
identical(toString(dat), as.character(dat))
[1] TRUE