Xml 在MS Word中使用XPath从特定节点选择属性

Xml 在MS Word中使用XPath从特定节点选择属性,xml,xpath,ms-word,mailmerge,Xml,Xpath,Ms Word,Mailmerge,我们的学生信息系统(Synergy)允许我们在MS Word中创建邮件合并文档以替换现有报告。为此,我尝试替换的报告将生成以下(简化的)XML: 如果学生在这段时间内没有课,那么最终输出的句点列中应该有空格 在Word文档中,我创建了一个带有静态标题行的表。表mergefield命令的开头和结尾是: {MERGEFIELD TableStart:REV_DATA_ROOT/Student \* MERGEFORMAT } 及 和放置在第二行的第一个和最后一个单元格中。我可以毫无问题地打印姓名和

我们的学生信息系统(Synergy)允许我们在MS Word中创建邮件合并文档以替换现有报告。为此,我尝试替换的报告将生成以下(简化的)XML:

如果学生在这段时间内没有课,那么最终输出的句点列中应该有空格

在Word文档中,我创建了一个带有静态标题行的表。表mergefield命令的开头和结尾是:

{MERGEFIELD TableStart:REV_DATA_ROOT/Student \* MERGEFORMAT }

和放置在第二行的第一个和最后一个单元格中。我可以毫无问题地打印姓名和成绩。如果我告诉教师选择一个特定的职位,我可以打印教师和房间号,即:

{MERGEFIELD StudentSchoolYear/StudentClass[1]/@TeacherFormattedname \* MERGEFORMAT }
{MERGEFIELD StudentSchoolYear/StudentClass[1]/@RoomNumber \* MERGEFORMAT }
不幸的是,如果我对每个课时都这样做(更新数字以匹配我想要的课时编号),对于这个学生,它将在P3列中打印P4,在P4列中打印P5,等等

这里的另一个问题让我尝试:

{MERGEFIELD (StudentSchoolYear/StudentClass[@PeriodBegin=’1’])[1]/@TeacherFormattedName \* MERGEFORMAT }
{MERGEFIELD (StudentSchoolYear/StudentClass[@PeriodBegin=’1’])[1]/@RoomNumber \* MERGEFORMAT }
这会产生一个错误:

Error: '(StudentSchoolYear/StudentClass[@PeriodBegin=’1’])' has an invalid token.
我的问题:对于Word的邮件合并引擎,我正在尝试做的事情是否过于复杂,或者是否存在语法错误?您是否尝试过:

{MERGEFIELD StudentSchoolYear/StudentClass[@PeriodBegin='1']/@TeacherFormattedname \* MERGEFORMAT }
这假设您只有一个@periodbeagin=1的StudentClass元素,但根据该假设,您不需要[1]

我必须承认,我从未见过部分括在括号内的XPath,这可能就是您出现语法错误的原因。

您是否尝试过:

{MERGEFIELD StudentSchoolYear/StudentClass[@PeriodBegin='1']/@TeacherFormattedname \* MERGEFORMAT }
这假设您只有一个@periodbeagin=1的StudentClass元素,但根据该假设,您不需要[1]


我必须承认,我从未见过部分括在括号内的XPath,这可能就是您出现语法错误的原因。

您收到了这个错误

错误:“(StudentSchoolYear/StudentClass[@PeriodBegin='1']”具有无效令牌


因为XPath表达式使用单卷曲/智能引号,而不是围绕
1
的直引号/哑引号。将
'1'
更改为
'1'
以解决此问题。

您收到此错误

错误:“(StudentSchoolYear/StudentClass[@PeriodBegin='1']”具有无效令牌


因为XPath表达式使用单卷曲/智能引号,而不是围绕
1
的直引号/哑引号。将
'1'
更改为
'1'
,以修复此问题。

此操作修复了错误。我不知道那些讨厌的智能引号是从哪里来的,因为我通常在Text Wrangler中键入表达式,然后复制并粘贴到字段中。谢谢这修复了错误。我不知道那些讨厌的智能引号是从哪里来的,因为我通常在Text Wrangler中键入表达式,然后复制并粘贴到字段中。谢谢错误是由智能引号引起的,但我继续将实际表达式更改为您建议的表达式,因为它对我更有意义。非常感谢你!错误是由智能引号引起的,但我继续将实际表达式更改为您建议的表达式,因为它对我更有意义。非常感谢你!
Error: '(StudentSchoolYear/StudentClass[@PeriodBegin=’1’])' has an invalid token.
{MERGEFIELD StudentSchoolYear/StudentClass[@PeriodBegin='1']/@TeacherFormattedname \* MERGEFORMAT }