A: Matching Elements

Here’s one approach:

<xsl:function name="f:element-matches" as="xs:boolean">
  <xsl:param name="srcElement" as="element()"/>
  <xsl:param name="targetElem" as="element()"/>
  <xsl:choose>
    <xsl:when test="node-name($srcElement) = node-name($targetElem)">
      <xsl:variable name="attrMatch">
        <xsl:for-each select="$srcElement/@*[namespace-uri(.) = '']">
          <xsl:variable name="aname" select="local-name(.)"/>
          <xsl:variable name="attr" select="$targetElem/@*[local-name(.) = $aname]"/>
          <xsl:choose>
            <xsl:when test="$attr = .">1</xsl:when>
            <xsl:otherwise>0</xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>
      </xsl:variable>
      <xsl:value-of select="not(contains($attrMatch, '0'))"/>
    </xsl:when>
    <xsl:otherwise><xsl:value-of select="false()"/></xsl:otherwise>
  </xsl:choose>
</xsl:function>