如何读取XML标签内嵌含变量的代码?DataStage导出XML解析咨询
问题解答
1. 这是否属于特殊类型的XML?
这不属于特殊类型XML,它是完全符合XML规范的标准文档。唯一的特殊点在于<Property Name="Value" PreFormatted="1">标签内嵌了预格式化的APT(Parallel Transformer)代码——这是DataStage TransformerStage自动生成的作业逻辑代码,PreFormatted="1"属性仅用于告知解析工具保留内容的换行、缩进等格式,不改变XML本身的标准结构。
2. 如何读取该标签内代码中的变量值?
要读取代码里的变量信息,需要分两步处理:
第一步:提取标签内的APT代码文本
使用标准XML解析工具定位到目标Property节点,提取其内部文本内容(需保留原格式)。示例用Python的xml.etree.ElementTree实现:
import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse('your_datastage_job.xml') root = tree.getroot() # 定位到目标Property节点 for prop in root.findall('.//Property[@Name="Value" and @PreFormatted="1"]'): apt_code = prop.text print(apt_code)
第二步:解析APT代码中的变量
APT代码里的变量分为不同类型,读取方式略有区别:
- 全局作业参数(global块):比如
ustring[] TRANSFORMER_ParamSetMasterInitParam_ParamReferenceDate这类,是DataStage作业的参数,静态读取可直接用正则匹配声明行,示例正则:
匹配后可捕获变量类型和名称,实际运行值需要从DataStage作业的参数配置中获取。global\s*\{\s*//.*?\n\s*(\w+)\s+(\w+); - 控制/中间变量(initialize块):比如
int8 RowRejected0、string InterVar0_0,同样用正则匹配声明行即可提取变量信息;如果要获取赋值后的实际值,需结合作业运行时的输入数据和逻辑计算。 - 条件赋值变量:比如示例中的
StageVar0_w1,它的取值是动态逻辑(依赖Lnk_Main_33.LKP_SRC_STM_ID是否为空),静态读取只能拿到赋值规则,实际值需要在作业运行时,根据输入数据的上下文计算得到。
如果是手动查看,也可以直接将提取的APT代码复制到文本编辑器,按代码块的结构(global/initialize/条件逻辑)查找对应变量。
内容的提问来源于stack exchange,提问作者chrisp
相关产品推荐
相关产品推荐

