【发布时间】:2015-08-06 17:10:00
【问题描述】:
在这些日子里,我一直在努力让 sas 读取 xfdf 文件,使用 adobe Professional 导出 pdf 格式的 cmets(注释)。 如果您从未使用过 .xfdf 文件,请不要担心,它基本上是 adobe 的 XML 父格式。
我不能使用 SAS XML Mapper,有两个原因:第一个是我不能在工作场所使用它(我也开发我的个人项目,像这样),第二个是我想编写一个可以一直重复的过程(无需随时映射)。
通常 cmets 以这种格式收集在 xfdf 中:
><freetext rect="300.165985,66.879105,380.165985,86.879105" creationdate="D:-001-1-1-1-1-1-00'30'" name="a7311cdb-77b3-4a48-8eff-62364f94213d" color="#FFBF00" flags="print" date="D:20150730153125+01'00'" page="0"
><contents-richtext
><body xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:APIVersion="Acrobat:8.0.0" xfa:spec="2.0.2" style="font-size:11.0pt;text-align:left;color:#FF0000;font-weight:normal;font-style:normal;font-family:Arial,sans-serif;font-stretch:normal"
><p
>THE_COMMENT_TO_EXPORT_IS_THIS_STRING</p
></body
></contents-richtext
></freetext
我用这部分 xml 地图收集数据:
<COLUMN name='var1'>
<PATH syntax='XPath'>/xfdf/annots/freetext/contents-richtext/body/p</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>60</LENGTH>
</COLUMN>
有时评论以另一种方式收集:
><freetext rect="331.041992,230.949005,553.198975,250.949005" creationdate="D:-001-1-1-1-1-1-00'30'" name="4f112387-dec6-42f1-ad8c-a1fecf9d8e04" color="#66CCFF" flags="print" date="D:20150730153213+01'00'" page="0"
><contents-richtext
><body xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:APIVersion="Acrobat:8.0.0" xfa:spec="2.0.2" style="font-size:11.0pt;text-align:left;color:#FF0000;font-weight:normal;font-style:normal;font-family:Arial,sans-serif;font-stretch:normal"
><p dir="ltr"
><span style="font-family:Arial"
>THE_COMMENT_TO_EXPORT_IS_THIS_STRING</span
></p
></body
></contents-richtext
></freetext
这里也没有问题,我可以用这个 xml 地图部分收集这个评论:
<COLUMN name='var2'>
<PATH syntax='XPath'>/xfdf/annots/freetext/contents-richtext/body/p/span</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>60</LENGTH>
</COLUMN>
但问题来了,有时数据是以这种奇怪的格式收集的,带有双跨度标签:
><freetext rect="9.623672,760.177979,210.281006,783.448975" creationdate="D:00000000000000Z" name="4f037e18-9143-4ec1-a6ae-249fa2215528" width="2" color="#66CCFF" flags="print" date="D:20150731152640+01'00'" page="53"
><contents-richtext
><body xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:APIVersion="Acrobat:8.0.0" xfa:spec="2.0.2" style="font-size:14.0pt;text-align:left;color:#000000;font-weight:normal;font-style:normal;font-family:Arial,sans-serif;font-stretch:normal"
><p dir="ltr"
><span style="font-family:Arial"
>THIS_IS_THE_FIRST_PART </span
><span style="font-family:Arial"
>THIS_IS_THE_SECOND_PART</span
></p
></body
></contents-richtext
></freetext
第二个地图代码只命中第二个字符串(这里:THIS_IS_THE_SECOND_PART),有人可以帮忙吗?如何用 sas 编写合适的地图来收集这两种信息?
PS:我很确定 SAS XML Mapper 也无法解决这个问题,我在网上发现有人遇到同样的问题,并使用该工具创建的地图。
PS2:路径类型为 xpath 1.0,我尝试使用 string-join,但出现此错误:
ERROR: invalid character in Xpath expression
ERROR: Xpath construct string-join(/xfdf/annots/freetext/contents-richtext/body/p/span, '')
for column var2 is an invalid, unrecognized, or unsupported form
编辑:添加了 HTML 标签,<P> 和 <SPAN> 是与此语言相关的标签。
【问题讨论】:
-
你能在 SAS 的 XPATH 实现中使用
string-join吗?喜欢this question? -
非常感谢@Joe,但我不这么认为,或者至少我不知道如何实现它。我的意思是,在那个问题中你好心地链接了他必须连接以不同方式命名的 2 个对象(ELEMENT4 ELEMENT5),我必须像他一样在同一个对象内连接 2 个字符串,但是这些字符串收集在不同的对象中但命名相同方式:(SPAN SPAN)。任何想法?再次感谢。